declare @N nvarchar(100)
set @N = 'abc'
set @S = 'ABC abc ABC abc'set @S = resplace( @S, @N, '['+ @N + ']' )结果是成了 [abc] [abc] [abc] [abc]
而我想保持以前的大小写格式,请问怎么做

解决方案 »

  1.   

    declare @S nvarchar(100)
    set @S = 'ABC abc ABC abc'
    set @S = '[' + replace(@S,' ','][') + ']'
    select @S
      

  2.   

    declare @S nvarchar(100)
    set @S = 'ABC abc ABC abc'
    set @S = '[' + replace(@S,' ','][') + ']'
    select @S
      

  3.   

    --改一下:
    declare @S nvarchar(100)
    set @S = 'ABC abc ABC abc'
    set @S = '[' + replace(@S,' ','] [') + ']'
    select @S
    ---结果:
    /***
    [ABC] [abc] [ABC] [abc]
    ***/
      

  4.   

    晕一下。上面的字符串只是个列子,字符串和被替换的字符都是任意的。
    因为sql不区分大小写,想在替换的时候保持原来的大小写格式,等于就是在匹配的字符串前后加个"[]",又希望速度快。
      

  5.   

    create function f_str(
    @str1 varchar(8000), --源字符串
    @str2 varchar(100),  --目标字符串
    @str3 varchar(100),  --替换源字符串中目标字符串为当前串,缺省表示不替换
    @str4 varchar(100),  --字符串左侧添加字符串
    @str5 varchar(100))  --字符串左侧添加字符串
    returns varchar(8000)
    as
    begin
        declare @ret varchar(1000)
        set @ret=''
        while charindex(@str2,@str1)>0
        begin
            set @ret=@ret+left(@str1,charindex(@str2,@str1)-1)+@str4+isnull(@str3,substring(@str1,charindex(@str2,@str1),len(@str2)))+@str5
            set @str1=stuff(@str1,1,charindex(@str2,@str1)+len(@str2)-1,'')
        end
        return @ret
    end
    godeclare @n varchar(100),@s varchar(1000)
    set @n = 'abc'
    set @s = 'ABC abc ABC abc'
    select dbo.f_str(@s,@n,null,'[',']')/*
    ---------------------------------------
    [ABC] [abc] [ABC] [abc]
    */drop function f_str
      

  6.   

    declare @S nvarchar(100)
    set @S = 'abC abc ABC abc'
    set @S = '[' + replace(@S,' ','][') + ']'
    select @S
      

  7.   

    declare @S nvarchar(100)
    set @S = 'abC abc ABC abc'
    set @S = '[' + replace(@S,' ','][') + ']'
    select @S