您的位置:首页 > 数据库

SQLServer字符串分隔函数

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




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<
4000
/span>
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,@str,@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,charindex(',',@SourceSql,1),'')  


                 
end  


 
return  


 
end  


   




----调用


 
select  
*   from   dbo.f_splitstr('1,2,3,4',',')


--结果:


1


2


3


4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlserver