sql中实现split()功能
数据库中,总是遇到⼀些字段内容,想根据某个标识截取⼀下字符串,可是都想不到好办法,如果能有⼀个像ASP.NET⾥⾯的Split⽅法,那该多好,多⽅便啊!
为什么不可以?我们⾃⼰写⼀个函数不就可以解决了吗?好吧,说⼲就⼲,⾃⼰来写个SplitString函数!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOjava中split的用法
CREATE function[dbo].[SplitString]
(
@Input nvarchar(max),
@Separator nvarchar(max)=',',
@RemoveEmptyEntries bit=1
)
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=1and@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=1and@Entry<>'')
begin
insert into@TABLE([Value]) Values(@Entry)
end
return
end
函数、表都建好了,下⾯调⽤测试⼀下吧:
declare@str1varchar(max), @str2varchar(max), @str3varchar(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]
具体的应⽤请根据⾃⼰的情况来吧。好了,总结到这,希望喜欢的朋友可以收藏吧,我也是给⾃⼰以后⽤的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论