我有以下一个字符串|0100|0200|0300|0400
    现在需要在存储过程中替换|0100,但是|0100里面的后两位00是不确定的,可能为|0123,|0134,请教各位,怎样实现只要找到|01这个前缀,就可以把|0100这部分替换成我想要的内容例如|3333

解决方案 »

  1.   

    replace(字符串,'|01','|3333')
      

  2.   

    declare @s varchar(50)
    set @s='|0100|0200|0300|0120'while patindex('%|01[0-9][0-9]%',@s)>0
    begin
    set @s=stuff(@s,patindex('%|01[0-9][0-9]%',@s),5,'|3333')
    end
    select @s不知道对不
      

  3.   

    ----如果|01在最前面还可以这样
    stuff(col,1,3,'|3333')
      

  4.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
    DROP TABLE tb
    GO
    CREATE TABLE tb( col varchar(100))
    go
    insert tb SELECT '|0100|0200|0300|0400'
    UNION ALL SELECT  '|0120|0200|0300|0400'
    UNION ALL SELECT  '|0120|0200|0403|0400'
    UNION ALL SELECT  '|0220|0200|0403|0400'
    go
    update tb 
    set col=REPLACE(STUFF(col,patINDEX('%|01%',col),5,'k'),'k','|3333')
    WHERE patINDEX('%|01%',col)>0
    go
    SELECT * FROM tb 
    /*
    ----------------------------------------------------------------------------------------------------
    |3333|0200|0300|0400
    |3333|0200|0300|0400
    |3333|0200|0403|0400
    |0220|0200|0403|0400
    */
      

  5.   

    declare @str varchar(4000),
    @reStr varchar(100),
    @findstr varchar(100)
    set @str='asdf|0134|0200|0300|0400'
    set @findstr='|01__|'
    set @reStr='|3333|'
    declare @pos int,@len int
    set @len=len(@findStr)
    set @pos=patindex('%'+@findstr+'%',@str)
    set @str=stuff(@str,@pos,@len,@reStr)
    select @str
      

  6.   

    declare @s varchar(200)
    set @s='|0100|0200|0300|0400'select replace(stuff(@s,charindex('|01',@s)+len('|01'),2,''),'|01','|3333')
    /*
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    |3333|0200|0300|0400(1 行受影响)*/
     
      

  7.   

    可能需求是这样的declare @s varchar(100)
    set @s='|0123|0200|0300|0400'
    select stuff(@s,charindex('|01',@s),5,'|3333')
      

  8.   

    那个01是变量,可能为02,03,04,我用这个方法把01做变量,但是出错
    eclare @s varchar(200)
    declare @i int
    set @s='|0100|0200|0300|0400'
    set @i=5
    select replace(stuff(@s,charindex('|0'+@i,@s)+len('|0'+@i),2,''),'|0'+@i,'|3333')
      

  9.   

    不知道用right()方法可以不!先把那个字符串拼接下来,然后截取五位,把前面的三位置固定,如果出问题的话,那么就00代替 否则正常截取!
      

  10.   

    declare @s varchar(200) 
    declare @i int 
    set @s='|0100|0200|0300|0400' 
    set @i=1
    select replace(stuff(@s,charindex('|0'+LTRIM(@i),@s)+len('|0'+LTRIM(@i)),2,''),'|0'+LTRIM(@i),'|3333')
    WHERE charindex('|0'+LTRIM(@i),@s)>0
    /*
    |3333|0200|0300|0400(1 行受影响)
    */
      

  11.   

    需求是这样的,我设置了个十关的小游戏,在用户的基本信息中做了个擂主的字段king,初始值为|0100|0200|0300|0400|0500|0600|0700|0800|0900|1000,前面的01,02代表关数,后面的00代表所用的秒数,如果某用户是第二关,第六关的擂主,所用时间分别为12秒,16秒,则他的字符串为|0100|0212|0300|0400|0500|0616|0700|0800|0900|1000,现在有另一个用户用10秒打破了他第二关的记录,那就需要把里面的0212变为0200,所以这里的关数是个变量,后面的时间也不明确,故请教各位。。