SQL Server 自定义字符串分割函数

摘要:
@字符串)15set@length = 116while@location<
一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数)  
 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 end
24 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 end
32 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   end
15 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 end
14 insert into @t(AccountCodeID) values (@str)
15 return 
16 end
17 go
----调用 
  select * from dbo.Func_SplitStr('1,2,3,4',',')   
--结果: 
1  
2  
3  

免责声明:文章转载自《SQL Server 自定义字符串分割函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 模拟鼠标(mouse_event)java算法——通过身份证号获取出生的年月日下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

简单的图像相似度计算方法

目录 塑料瓶图像检测 说明 1.方法 2.测试结果(单张图片比对) 直方图 互信息 余弦相似度 感知哈希算法 3.评价 塑料瓶图像检测 目的:用于判断一张图片是否为塑料瓶; 条件:总计300多张图片分为70多类,同一类塑料瓶分别放置在同一个文件夹; 思路:选取每个文件夹的一张图片与目标图片对比计算返回相似度最高的值,通过多次试验确定阈值,...

【百度地图API】如何获取行政区域的边界? (转载)

摘要:以前教过大家如何自行获取行政区域,或者自定义获取一个区域的边界值。今天来教大家直接调用百度地图API1.3(目前最新版本)来获取行政区域的边界值。 -------------------------------------------------------------------------------------- 一、建立地图 创建地图对象;设...

Asp.net(asp,jsp)+JavaScript动态实现添加数据行

           在应用程序的开发中,有些输入信息是动态的,比如我们要注册一个员工的工作经历,比如下图 如果做成死的,只能填写三个,如果是四个呢?或者更多呢,那不是添加不上去了吗,所以这样固然不好,我们可以用动态添加表格行实现,如下图,添加一行,输入一行信息,这样比较灵活 下面我们就来看看如何在asp和asp.net中结合javascript来实现...

MySQL 中&amp;lt;=&amp;gt;用法(长知识)

https://www.runoob.com/mysql/mysql-operator.html MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级。 MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算符包括: 运算符 作用 + 加法 - 减法...

字典树的使用(匹配子串)

题目: 现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。 给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。 保证p中的串长度小于等于8,且p中的串的个数小于等于500,同...

requirej入门nodeTpl使用(三)

基本语法 HTML部分 在模板中的 HTML 部分,使用定界符“<?”和“?>”作为语法的开始和结束。 在定界符内,可以书写任意JavaScript语句,如: 1 <?for(var i=0; i<10; i++){?> 2 <p>hello, world</p> 3 <?}?> 使用等...