博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 自定义字符串分割函数
阅读量:6372 次
发布时间:2019-06-23

本文共 2815 字,大约阅读时间需要 9 分钟。

一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数)  
1 create function Func_StrArrayLength   2 (   3   @str varchar(1024),  --要分割的字符串  4   @split varchar(10)  --分隔符号  5 )   6 returns int   7 as   8 begin   9   declare @location int  10   declare @start int  11   declare @length int  12   13   set @str=ltrim(rtrim(@str))  14   set @location=charindex(@split,@str)  15   set @length=1  16   while @location<>0  17   begin  18     set @start=@location+1  19     set @location=charindex(@split,@str,@start)  20     set @length=@length+1  21   end  22   return @length  23 end24 go
调用示例:select dbo.Func_StrArrayLength('78,1,2,3',',')  
返回值:4  
  
二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便(标量值函数)
1 create function Func_StrArrayStrOfIndex   2 (   3   @str varchar(1024),  --要分割的字符串  4   @split varchar(10),  --分隔符号  5   @index int --取第几个元素  6 )   7 returns varchar(1024)   8 as   9 begin  10   declare @location int  11   declare @start int  12   declare @next int  13   declare @seed int  14   15   set @str=ltrim(rtrim(@str))  16   set @start=1  17   set @next=1  18   set @seed=len(@split)  19     20   set @location=charindex(@split,@str)  21   while @location<>0 and @index>@next  22   begin  23     set @start=@location+@seed  24     set @location=charindex(@split,@str,@start)  25     set @next=@next+1  26   end  27   if @location =0 select @location =len(@str)+1  28  --这儿存在两种情况:、字符串不存在分隔符号2、字符串中存在分隔符号,跳出while循环后,@location为,那默认为字符串后边有一个分隔符号。 29     30   return substring(@str,@start,@location-@start)  31 end32 go
调用示例:select dbo.Func_StrArrayStrOfIndex('8,9,4',',',2)  
返回值:9  
  
三、结合上边两个函数,像数组一样遍历字符串中的元素(表值函数) 
1 create function Func_SplitStr(@SourceSql varchar(8000), @StrSeprate varchar(100))      2   returns @temp table(F1 varchar(100))      3   as        4   begin      5   declare @ch as varchar(100)      6   set @SourceSql=@SourceSql+@StrSeprate        7   while(@SourceSql<>'')      8   begin      9     set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)     10     insert @temp values(@ch)     11     set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')     12   end     13   return     14   end15 go
----调用 
  select * from dbo.Func_SplitStr('1,2,3,4',',')   
--结果: 
1  
2  
3  

4  

 

另一种方式(表值函数):
1 create function Func_SplitStr(@str nvarchar(2000),@split nvarchar(2)) 2 returns @t table(AccountCodeID int ) 3 as  4 begin 5 declare @tmpAccountCodeID int,@getIndex int 6 set  @getIndex=charindex(',',@str) 7 while(@getIndex<>0)    8 begin 9     set @tmpAccountCodeID=convert(int,substring(@str,1,@getIndex-1))10     insert into @t(AccountCodeID) values (@tmpAccountCodeID)11     set @str=stuff(@str,1,@getIndex,'')12     set  @getIndex=charindex(',',@str)   13 end14 insert into @t(AccountCodeID) values (@str)15 return 16 end17 go
----调用 
  select * from dbo.Func_SplitStr('1,2,3,4',',')   
--结果: 
1  
2  
3  
 
 
 

转载地址:http://bwyqa.baihongyu.com/

你可能感兴趣的文章
演示:使用协议分析器取证IPv6的报文结构
查看>>
我的友情链接
查看>>
Cocos2d-x 弹出对话框的设计与实现
查看>>
oralce之rownum
查看>>
Spring Boot Quartz集成(一)
查看>>
java 、js 字符串中提取中英文+数字
查看>>
2014新浪校招笔试题:取水果
查看>>
通过nginx访问静态文件配置
查看>>
IP子网划分
查看>>
Redis Sentinel机制与用法(一)
查看>>
商城系统概述
查看>>
XML编辑器oXygen XML Editor V19大版本更新 | 附下载
查看>>
Microsoft Visio 控件Aspose.Diagram 12月新版17.12发布 | 附下载
查看>>
超实用!常用开源许可证有啥区别。
查看>>
hosts文件修改完无效的解决办法
查看>>
我的友情链接
查看>>
JSP九大内置对象
查看>>
解决Mysql字符编码问题
查看>>
Mac OS 显示隐藏文件
查看>>
Linode Center OS 6.5(x64) 用Nginx 反向代理多个Tomcat 负载均衡。
查看>>