在T-SQL中我们经常批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了。这里将字符串分割以table形式输出
语法如下:
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- /*
- create by shuke.li 2020-9-15
- */
- 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
只要在新建查询里执行上面的代码,即完成了split函数的建立。
下面来测试这一函数的功能,测试所使用的的SQL脚本如下:
- declare @str1 varchar(max)
- set @str1 = 'CFER-3345-3323,CFER-0023-2299,CFER-0023-6677,CFER-0023-7678,CFER-4565-2299,CFER-0023-6678'
-
- select * from [dbo].[SplitString](@str1, ',', 0)
结果显示如下图所示:

最终使用方法和c#中的split函数是不是很相似!