有这样的一个字符串,如:IF(CHDS=1,0,6)  要把里面的CHDS替换掉,但是遇到单个字母时,则不进行替换,如遇到D时不进行替换,可不可以写个自定义的替换函数,实现这个功能。
具体的意思就是这样:select myreplace('IF(CHDS=1,0,1)','CHDS','1') 
--输出
IF(1=1,0,1)
select myreplace('IF(CHDS=1,0,1)','D',10)
--则不进行替换,原样输出
IF(CHDS=1,0,1)

解决方案 »

  1.   

    create function myreplace(@s varchar(50),@rp varchar(10),@str varchar(10))
    returns varchar(50)
    as
    begin
    select 
      @s=case 
           when len(@rp)>1 
             then replace(@s,@rp,@str)
           else
             @s
         end
    return @s
    end
    goselect dbo.myreplace('IF(CHDS=1,0,1)','CHDS','1') 
      

  2.   

    declare @s varchar(20)
    set @s = 'IF(CHDS=1,0,1)'
    select replace(@s,'CHDS','')
    结果
    IF(=1,0,1)这样?
      

  3.   

    ALTER FUNCTION myreplace(@sstr1 VARCHAR(30),@sstr2 VARCHAR(30),@sstr3 VARCHAR(30))
    RETURNS VARCHAR(100)
    AS
    BEGINDECLARE @ret VARCHAR(100)IF(LEN(@sstr2) <= 1) SELECT @ret = @sstr1
    ELSE set @ret = REPLACE(@sstr1,@sstr2,@sstr3)RETURN @retEND
    SELECT dbo.myreplace('IF(CHDS=1,0,1)','CHDS','10') select dbo.myreplace('IF(CHDS=1,0,1)','D','10')
      

  4.   


    不是,是要写个自己定义的replace函数
      

  5.   

    你这个函数做这个语句时不行啊select myreplace('IF(CHDS=1,1,0','D',10)
    --输出结果
    IF(CH10S=1,1,0)
    而我要的结果是
    遇到D是不进行替换的
      

  6.   


    意思要把CHDS当做一个整体来替换,如果只是部分字段就不能进行替换
      

  7.   

    这么怎么会知道,哪个是整体,哪个是部分呢?“CHDS”与“D”都是只是前面字符串的部分而已。
      

  8.   


    CHDS是一个整体,故如果是D或者HD之类都不进行替换
      

  9.   

    借树哥的函数做一个稍微修改 就可以了!
    create function myreplace(@s varchar(50),@rp varchar(10),@str varchar(10))
    returns varchar(50)
    as
    begin
    select 
      @s=case 
           when @rp not in ('c','h','d','s') 
             then replace(@s,@rp,@str)
           else
             @s
         end
    return @s
    end
    select dbo.myreplace('IF(CHDS=1,0,1)','Dh','1') IF(CHDS=1,0,1)
    select dbo.myreplace('IF(CHDS=1,0,1)','CHDS','1') IF(1=1,0,1)
      

  10.   


    少写了一个条件。
    create function myreplace(@s varchar(50),@rp varchar(10),@str varchar(10))
    returns varchar(50)
    as
    begin
    select 
      @s=case 
           when @rp not in ('C','H','D','S') and len(@rp)>3
             then replace(@s,@rp,@str)
           else
             @s
             
         end
    return @s
    end