CREATE FUNCTION dbo.f_split_strings(@s varchar(8000),@mc varchar(10),@dc varchar(10))
RETURNS @t TABLE(s1 varchar(4000),s2 varchar(4000))
AS
BEGIN
--作者:pbsql
--将指定字符串@s以字符串@mc为分隔拆分,再将拆分后的字符串按@dc拆分,最后得到记录集
DECLARE @string varchar(8000),@i int,@j int,@ml int,@dl int
SELECT @i=CHARINDEX(@mc,@s),@ml=LEN(@mc),@dl=LEN(@dc)
WHILE @i>0
BEGIN
SELECT @string=LEFT(@s,@i-1),@j=CHARINDEX(@dc,@string)
INSERT @t(s1,s2)
VALUES(LEFT(@string,@j-1),SUBSTRING(@string,@j+@dl,LEN(@string)-@j-@dl+1))
SELECT @s=STUFF(@s,1,@i+@ml-1,''),@i=CHARINDEX(@mc,@s)
END
SELECT @string=@s,@j=CHARINDEX(@dc,@string)
INSERT @t(s1,s2)
VALUES(LEFT(@string,@j-1),SUBSTRING(@string,@j+@dl,LEN(@string)-@j-@dl+1))
RETURN
END
GO
调用示例:
SELECT * FROM dbo.f_split_strings('1,a;2,b;3,c',';',',')
返回:
s1 s2
1 a
2 b
3 c