在sql server中自定义一个Split函数

发布时间:2019-09-26编辑:脚本学堂
sql server中没有数组类型,但是有类似table类型数值。可以这样处理:函数输入值为一个字符类型(varchar之类的)的参数,返回一个table类型的结果。

sql server中没有数组类型,但是有类似table类型数值。
可以这样处理:函数输入值为一个字符类型(varchar之类的)的参数,返回一个table类型的结果。

定义如下:

1,参数定义和说明
输出参数:@splitString varchar(8000) -- 需要Split的字符串
          @separate varchar(10)  ---分隔符

返回:@returnTable table(col_Value varchar(20))  --单个字符长度可以按照需要修改

2,函数体
 

复制代码 代码如下:

CREATE FUNCTION SplitStr (@splitString varchar(8000), @separate varchar(10))
RETURNS @returnTable table(col_Value varchar(20))
AS

BEGIN

declare @thisSplitStr varchar(20)
declare @thisSepIndex int
declare @lastSepIndex int

set @lastSepIndex = 0

if Right(@splitString ,len(@separate)) <> @separate set @splitString = @splitString + @separate
set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)

while @lastSepIndex <= @thisSepIndex
begin
         set @thisSplitStr = SubString(@splitString ,@lastSepIndex,@thisSepIndex-@lastSepIndex)
         set @lastSepIndex = @thisSepIndex + 1
         set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)
         insert into @returnTable values(@thisSplitStr)
end
return

END

调用示例:
 

复制代码 代码如下:
select * from SplitStr(‘123,456,789’,’,’)

输出结果:
col_value
----------------------
123
456
789