SQL里类似SPLIT的分割字符串函数

前端之家收集整理的这篇文章主要介绍了SQL里类似SPLIT的分割字符串函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一,用临时表作为数组
<div class="codetitle"><a style="CURSOR: pointer" data="36036" class="copybut" id="copybut36036" onclick="doCopy('code36036')"> 代码如下:

<div class="codebody" id="code36036">
create function f_split(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,@c),'')
end
insert @t(col) values (@c)
return
end
go select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',') drop function f_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk

(所影响的行数为 4 行)
二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
<div class="codetitle"><a style="CURSOR: pointer" data="27750" class="copybut" id="copybut27750" onclick="doCopy('code27750')"> 代码如下:
<div class="codebody" id="code27750">
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,2,3',')
返回值:4 三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
<div class="codetitle"><a style="CURSOR: pointer" data="5724" class="copybut" id="copybut5724" onclick="doCopy('code5724')"> 代码如下:
<div class="codebody" id="code5724">
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 三、结合上边两个函数,象数组一样遍历字符串中的元素
<div class="codetitle"><a style="CURSOR: pointer" data="45245" class="copybut" id="copybut45245" onclick="doCopy('code45245')"> 代码如下:
<div class="codebody" id="code45245">
declare @str varchar(50)
set @str='1,3,4,5'
declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,')
begin
print dbo.Get_StrArrayStrOfIndex(@str,@next)
set @next=@next+1
end

调用结果:
1
2
3
4
5

分割字符串

猜你在找的MsSQL相关文章