加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server切割字符串SplitString函数的简单示例

发布时间:2020-12-12 07:38:55 所属栏目:MsSql教程 来源:网络整理
导读:感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 代码如下: 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 separ

感兴趣的小伙伴,下面一起跟随编程之家 52php.cn的小编两巴掌来看看吧!

代码如下:

 
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,3',',1) as t on a.[Id]=t.[Value]


具体的应用请根据自己的情况来吧:)
作者:Kudy

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读