sql server中实现split功能
sql server中实现split功能一、实现形式一 :Split 表函数将一个字符串按指定分隔符进行分割,返回一个表
--Split 表函数将一个字符串按指定分隔符进行分割,返回一个表。
create function split(
@string varchar(255),--待分割字符串
@separator varchar(255)--分割符
)returns @array table(item varchar(255))
as
begin
declare @begin int,@end int,@item varchar(255)
set @begin = 1
set @end=charindex(@separator,@string,@begin)
while(@end<>0)
begin
set @item = substring(@string,@begin,@end-@begin)
insert into @array(item) values(@item)
set @begin = @end+1
set @end=charindex(@separator,@string,@begin)
end
set @item = substring(@string,@begin,len(@string)+1-@begin)
if (len(@item)>0)
insert into @array(item) values(substring(@string,@begin,len(@string)+1-@begin))
return
end
测试一
select * from dbo.split('a,b,c,d',',')
或者(待分割字符串末尾多了个逗号)
select * from dbo.split('a,b,c,d,',',')
结果
测试二
select * from dbo.split(',a,,b,c,d',',')
结果
二、方式二:用指定字符串分割后,返回第几个数据
create function [dbo].[fn_split]
(
@inputstr varchar(8000),
@seprator varchar(10),
@p int --要取第几个数据,从0开始,如果要返回分割后的数组列表清删除--##部分即可
)
returns @temp table (a varchar(200))
as
begin
declare @i int
declare @n int --记录循环的次数
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
SET @n =0 --##
WHILE @i>=1
begin
IF @p=@n --##
begin
insert @temp values(left(@inputstr, @i - 1))
end
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
SET @n = @n+1 --##
END
if @inputstr <> '' --最后一位
IF @p=@n --##
insert @temp values(@inputstr)
return
end
测试
select * from dbo.fn_split('aB,bB,cB,dB',',',1)
结果