方式一:通过charindex和substring。

代码
create function func_splitstring
(@str nvarchar(max),@split varchar(10))
returns @t Table (c1 varchar(100))
as
begin
declare @i int
declare @s int
set @i=1
set @s=1
while(@i>0)
begin
set @i=charindex(@split,@str,@s)
if(@i>0)
begin
insert @t(c1) values(substring(@str,@s,@i-@s))
end
else begin
insert @t(c1) values(substring(@str,@s,len(@str)-@s+1))
end
set @s = @i + 1
end
return
end
(@str nvarchar(max),@split varchar(10))
returns @t Table (c1 varchar(100))
as
begin
declare @i int
declare @s int
set @i=1
set @s=1
while(@i>0)
begin
set @i=charindex(@split,@str,@s)
if(@i>0)
begin
insert @t(c1) values(substring(@str,@s,@i-@s))
end
else begin
insert @t(c1) values(substring(@str,@s,len(@str)-@s+1))
end
set @s = @i + 1
end
return
end
执行:select * from dbo.func_splitstring('1,2,3,4,5,6', ',')
结果:

方式二:通过XQuery(需要SQL 2005以上版本)。

代码
create function func_splitid
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 int)
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
INSERT INTO @t SELECT x.item.value('@id[1]', 'INT') FROM @x.nodes('//items/item') AS x(item)
RETURN
END
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 int)
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
INSERT INTO @t SELECT x.item.value('@id[1]', 'INT') FROM @x.nodes('//items/item') AS x(item)
RETURN
END
执行:select * from dbo.func_splitid('1,2,3,4,5,6', ',')
结果:

本文介绍两种将由逗号等符号分隔的ID字符串转换为SQL临时表的方法,包括使用charindex与substring的传统方法及利用XQuery的现代方法。
1万+

被折叠的 条评论
为什么被折叠?



