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

SQLserver字符串分割函数

发布时间:2020-12-12 13:58:38 所属栏目:MsSql教程 来源:网络整理
导读:一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 CREATE function Get_StrArrayLength ( ? @str varchar(1024),? --要分割的字符串 ? @split varchar(10)? --分隔符号 ) retu

一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

CREATE function Get_StrArrayLength
(
? @str varchar(1024),? --要分割的字符串
? @split varchar(10)? --分隔符号
)
returns int
as
begin
? declare @location int
? declare @start int
? declare @length int

? set @str=ltrim(rtrim(@str))
? set @location=charindex(@split,@str)
? set @length=1
? while @location<>0
? begin
??? set @start=@location+1
??? set @location=charindex(@split,@str,@start)
??? set @length=@length+1
? end
? return @length
end
调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')
返回值:4

二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

CREATE function Get_StrArrayStrOfIndex
(
? @str varchar(1024),? --要分割的字符串
? @split varchar(10),? --分隔符号
? @index int --取第几个元素
)
returns varchar(1024)
as
begin
? declare @location int
? declare @start int
? declare @next int
? declare @seed int

? set @str=ltrim(rtrim(@str))
? set @start=1
? set @next=1
? set @seed=len(@split)
?
? set @location=charindex(@split,@str)
? while @location<>0 and @index>@next
? begin
??? set @start=@location+@seed
??? set @location=charindex(@split,@start)
??? set @next=@next+1
? end
? if @location =0 select @location =len(@str)+1
?--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
?
? return substring(@str,@start,@location-@start)
end
调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',2)
返回值:9

三、结合上边两个函数,象数组一样遍历字符串中的元素

create?? function??? f_splitstr(@SourceSql?? varchar(8000),@StrSeprate?? varchar(100))??
? returns?? @temp?? table(F1?? varchar(100))??
? as????
? begin??
? declare?? @ch?? as?? varchar(100)??
? set?? @SourceSql=@SourceSql+@StrSeprate????
? while(@SourceSql<>'')??
????????????????? begin??
????????????????? set?? @ch=left(@SourceSql,charindex(',@SourceSql,1)-1)??
? insert?? @temp?? values(@ch)??
? set?? @SourceSql=stuff(@SourceSql,1),'')??
????????????????? end??
? return??
? end??
???

----调用
? select?? *?? from??? dbo.f_splitstr('1,3,')
--结果:
1
2
3

4

--例子

create function [dbo].[split] ( @SourceSql varchar(8000),@StrSeprate varchar(10) ) returns @temp table(F1 varchar(100)) as begin ??? declare @i int ??? set @SourceSql = rtrim(ltrim(@SourceSql)) ??? set @i = charindex(@StrSeprate,@SourceSql) ??? while @i >= 1 ??? begin ??????? if len(left(@SourceSql,@i-1))>0 ??????? begin ??????????? insert @temp values(left(@SourceSql,@i-1)) ??????? end ??????? set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) ??????? set @i=charindex(@StrSeprate,@SourceSql) ??? end ??? if @SourceSql <> '' ??????? insert @temp values(@SourceSql) ??? return end ? select * from split(',777,11,888,88,1122,77,00,00',')

(编辑:李大同)

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

    推荐文章
      热点阅读