SQL Server字符串分割函数

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

CREATEfunction Get_StrArrayLength
(
 
@strvarchar(1024),  --要分割的字符串
  @splitvarchar(10--分隔符号
)
returnsint
as
begin
 
declare@locationint
 
declare@startint
 
declare@lengthint

 
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

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

CREATEfunction Get_StrArrayStrOfIndex
(
 
@strvarchar(1024),  --要分割的字符串
  @splitvarchar(10),  --分隔符号
  @indexint--取第几个元素
)
returnsvarchar(1024)
as
begin
 
declare@locationint
 
declare@startint
 
declare@nextint
 
declare@seedint

 
set@str=ltrim(rtrim(@str))
 
set@start=1
 
set@next=1
 
set@seed=len(@split)
 
 
set@location=charindex(@split,@str)
 
while@location<>0and@index>@next
 
begin
   
set@start=@location+@seed
   
set@location=charindex(@split,@str,@start)
   
set@next=@next+1
 
end
 
if@location=0select@location=len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
 
 
returnsubstring(@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,charindex(',',@SourceSql,1),'')  
                 
end  
 
return  
 
end  
   

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

原文地址:https://www.cnblogs.com/jameslif/p/3278016.html