现在有一个字符串,不定长,长度为偶数,比如字符创A1B1CCD1,当前我想没两位加上一个逗号分隔,通过一条SQL实现,最好不要用循环,该如何写?实现的目的是为了判断另外一个两位编码是否在里面存在,因为不加逗号分开,当前如果判断CD码在里面是存在的,如果按照两位编码的规则划分,A1 B1 CC D1,CD码在里面应该不存在。考虑到算法优化,希望通过一条SQL实现该功能

解决方案 »

  1.   

    declare @i as int
    declare @str as varchar(100)
    set @str = 'A1B1CCD1'
    decalre @s as varchar(200)
    set @s = ''
    set @i = 1
    while @i <= len(@str) / 2
    begin
      @s = @s + substring(@str , @i , 2)
      set @i = @i + 1
    end
      

  2.   

    declare @i as int 
    declare @str as varchar(100) 
    set @str =  'A1B1CCD1 ' 
    declare @s as varchar(200) 
    set @s =  '' 
    set @i = 1 
    while @i  <= len(@str) 
    begin 
      set @s = @s + substring(@str , @i , 2) + ','
      set @i = @i + 2 
    end print substring(@s , 1 , len(@s) -1)/*
    A1,B1,CC,D1
    */
      

  3.   


    declare @str varchar(20)
    set @str='A1B1CCD1'
    select case when charindex('cd',@str)%2=1 then '存在' else '不存在' end
      

  4.   

    用函数吧,代码绝对优化,create function change(@str varchar(50)) 
    returns varchar(50)
    as
    begin
    DECLARE @i INT
    SET @i=3
    WHILE @i< datalength(@str)
    BEGIN
    select @str=STUFF(@str,@i,0,',')
    SET @i=3+@i
    END
    return @str
    end
    GOselect dbo.change('ASDFASDFASDFSA')
      

  5.   

    现在有一个字符串,不定长,长度为偶数,比如字符创A1B1CCD1,当前我想没两位加上一个逗号分隔,通过一条SQL实现,最好不要用循环,该如何写?实现的目的是为了判断另外一个两位编码是否在里面存在,因为不加逗号分开,当前如果判断CD码在里面是存在的,如果按照两位编码的规则划分,A1 B1 CC D1,CD码在里面应该不存在。考虑到算法优化,希望通过一条SQL实现该功能
    ----------这个不用分隔也能实现的!
    if(charindex('CD','A1B1CCD1')%2>0)
    print 'CD在A1B1CCD1里面'
    else
    print 'CD不在A1B1CCD1里面'select 是否存在=(case when charindex('CD',字符串字段)%2>0 then '在' else '不在' end)
    from tb
      

  6.   

    那万一出现'A1 B1 CC D1 CD呢,呵呵