要实现这么一个用户自定义函数:
传入的字符串参数有两个字串
A-a;B-b;C-c;D-d;E-e 和 A;B;C
根据这两个参数 输出结果为a;b;c
达人指点,谢谢
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
如果就这个例子来说的话,把A;B;C转成小写的不就行了。
提供一个简单的想法:
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