日期:2014-05-18  浏览次数:20502 次

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

------解决方案--------------------
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

------解决方案--------------------
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
*/

------解决方案--------------------

declare @str varchar(20)
set @str='A1B1CCD1'
select case when charindex('cd',@str)%2=1 then '存在' else '不存在' end
------解决方案--------------------
用函数吧,代码绝对优化,
SQL code

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
GO

select dbo.change('ASDFASDFASDFSA')

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

这个不用分隔也能实现的!
SQL code
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