有几行数量,数据长度不一,如
152AB01AB1
152AB0102AB1.
现在我想把这二行的数据中的从右边算起第二位的B和第三位的A分别用CD代替,请问高手要怎么处理,谢谢了。注意,同个记录里面AB可能有多个,我只是要替换倒数第二个、第三个的AB字符串。 

解决方案 »

  1.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-07-18 08:48:55
    -------------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (col VARCHAR(12))
    INSERT INTO @T
    SELECT '152AB01AB1' UNION ALL
    SELECT '152AB0102AB1' --SQL查询如下:UPDATE @T SET
        col = CASE WHEN LEN(col) > 2 THEN 
                      STUFF(col,LEN(col)-2,2,'CD')
                   ELSE col END;SELECT * FROM @T;/*
    col
    ------------
    152AB01CD1
    152AB0102CD1(2 行受影响)
    */
      

  2.   


    declare @str1 varchar(100),@str2 varchar(100)
    select @str1='152AB01AB1 ',@str2='152AB0102AB1'
    select stuff(@str1,len(@str1)-2,2,'DC'),stuff(@str2,len(@str2)-2,2,'DC')
      

  3.   

    CREATE TABLE TBTEST(STRING VARCHAR(20))
    INSERT TBTEST
    SELECT '152AB01AB1' UNION
    SELECT '152AB0102AB1'UNION 
    SELECT '152AB002AB54'SELECT LEFT(STRING,LEN(STRING)-3)+REPLACE(RIGHT(LTRIM(STRING),3),'AB','CD')  AS STRING FROM TBTEST
    STRING                                                                                                                                                                                                                                                           
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    152AB002AB54
    152AB0102CD1
    152AB01CD1(所影响的行数为 3 行)
      

  4.   

    SELECT LEFT(STRING,LEN(STRING)-3)+REPLACE(LEFT(RIGHT(LTRIM(STRING),3),2),'AB','CD')+RIGHT(RIGHT(LTRIM(STRING),3),1)  AS STRING FROM TBTEST
    这样应该标准点!
      

  5.   

    用这个方法:
    首先用While循环,把第二行数据反序排列,然后你就可以用SQL Server里面的Charindex函数和Replace函数了
      

  6.   

    DECLARE @T TABLE (col VARCHAR(12))
    INSERT INTO @T
    SELECT '152AB01AB1' UNION ALL
    SELECT '152AB0102AB1' update @t 
    set col=LEFT(col,LEN(col)-3)+'CD'+RIGHT(col,1)
    select * from @tcol
    ------------
    152AB01CD1
    152AB0102CD1
      

  7.   

    哈哈这题有陷井,人家是要用C换B,用D换A也就是说应该是DC^o^
      

  8.   

    guguda2008
    的符合我的要求,而且做法比较简单,我决定把分给他