SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /*
by kudychen 2011-9-28
*/ CREATE function [dbo].[SplitString] ( @Input nvarchar(max), --input string to be separated
@Separator nvarchar(max)=',', --a string that delimit the substrings in the input string
@RemoveEmptyEntrIEs bit=1 --the return value does not include array elements that contain an empty string
) returns @TABLE table ( [Id] int identity(1,1), [Value] nvarchar(max) ) as begin declare @Index int, @Entry nvarchar(max) set @Index = charindex(@Separator,@Input) while (@Index>0) begin set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1))) if (@RemoveEmptyEntrIEs=0) or (@RemoveEmptyEntrIEs=1 and @Entry<>'') begin insert into @TABLE([Value]) Values(@Entry) end set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input)) set @Index = charindex(@Separator, @Input) end set @Entry=ltrim(rtrim(@Input)) if (@RemoveEmptyEntrIEs=0) or (@RemoveEmptyEntrIEs=1 and @Entry<>'') begin insert into @TABLE([Value]) Values(@Entry) end return end
如何使用:
declare @str1 varchar(max), @str2 varchar(max), @str3 varchar(max)
set @str1 = '1,2,3' set @str2 = '1###2###3' set @str3 = '1###2###3###'
select [Value] from [dbo].[SplitString](@str1, ',', 1) select [Value] from [dbo].[SplitString](@str2, '###', 1) select [Value] from [dbo].[SplitString](@str3, '###', 0)
執行結果:
裡面還有個自增的[Id]字段哦,在某些情況下有可能會用上的,例如根據Id來保存排序等等。
例如根據某表的ID保存排序:
update a set a.[Order]=t.[Id] from [dbo].[表] as a join [dbo].SplitString('1,2,3', ',', 1) as t on a.[Id]=t.[Value]
具體的應用請根據自己的情況來吧。