首页 新闻 会员 周边 捐助

Sql 字符串分割 拼接 ---求教SQl达人

0
悬赏园豆:10 [已解决问题] 解决于 2010-07-27 13:37

要实现这么一个用户自定义函数:
传入的字符串参数有两个字串  

  A-a;B-b;C-c;D-d;E-e 和 A;B;C

根据这两个参数 输出结果为a;b;c

达人指点,谢谢

Yurnero的主页 Yurnero | 初学一级 | 园豆:125
提问于:2010-07-20 11:45
< >
分享
最佳答案
0

Create function DemoSplitChar
(
@str1 nvarchar(200),@str2 nvarchar(200) )
returns nvarchar(200)
as
begin
declare @pos int
set @pos=-1
set @pos=CHARINDEX(';',@str2)
while(@pos>0)
begin
--分离第一个A;
declare @tempname nvarchar(20)
set @tempname=SUBSTRING(@str2,1,@pos)
set @tempName=replace(@tempname,';','')
--print @tempName
--替换第一个A-
set @str1=replace(@str1,@tempname+'-','')
--分离第二个B;
set @str2=SUBSTRING(@str2,@pos+1,LEN(@str2))
set @pos=CHARINDEX(';',@str2)
end
if(len(@str2)>0)
begin
--替换最后一个C-
set @str2=replace(@str2,';','')
set @str1=replace(@str1,@str2+'-','')
end
/*
此时结果为a;b;c;D-d;E-e,需移除没有匹配到的D和E
*/
--print @str1
--反转字符串
set @str1=reverse(@str1)
set @pos=CHARINDEX('-',@str1)

while (@pos>0)
begin
declare @temp int
set @temp=charindex(';',@str1)
set @str1=substring(@str1,@temp+1,len(@str1)-@temp)
set @pos=CHARINDEX('-',@str1)
--print @pos
--print @str1
end
--还原字符串
set @str1=reverse(@str1)
return @str1
end

--调用函数
select dbo.DemoSplitChar('A-a;B-b;C-c;D-d;E-e','A;B;C')
--结果a;b;c
select dbo.DemoSplitChar('A-a;B-b;C-c;D-d;E-e','A;B;C;D')
--结果a;b;c;d

 

收获园豆:10
邀月 | 高人七级 |园豆:25475 | 2010-07-20 15:25
其他回答(2)
0

如果就这个例子来说的话,把A;B;C转成小写的不就行了。

dege301 | 园豆:2825 (老鸟四级) | 2010-07-20 15:41
0

提供一个简单的想法:

1. 把字符串(A-a;B-b;C-c;D-d;E-e )作为table的两列,塞到临时的table中.

tableA(col1,col2)

('A','a')

('B','b')

('C','c')

('D','d')

('E','e ')

 

2. 根据col1(A;B;C)找出col2

a

b

c

3. 再拼接成字符串:a;b;c

changbluesky | 园豆:854 (小虾三级) | 2010-07-26 12:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册