SQL分割字符串函数(转)
2015-09-25 09:44
337 查看
SQL分割字符串函数SQL里类似Split的分割字符串函数
SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。
一.用临时表作为数组
二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果
三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。
一.用临时表作为数组
1 /* 2 函 数 名:F_split 3 函数作用:分割字符串 4 函数参数: 5 @c ### 要分割的字符串 6 @split ### 分隔符号 7 示例: 8 Select * From dbo.F_split('a,b,c,d',',') 9 返回结果: 10 a 11 b 12 c 13 d 14 */ 15 CREATE FUNCTION F_split(@c VARCHAR(2000), 16 @split VARCHAR(2)) 17 returns @t TABLE( 18 col VARCHAR(20)) 19 AS 20 BEGIN 21 WHILE( Charindex(@split, @c) <> 0 ) 22 BEGIN 23 INSERT @t 24 (col) 25 VALUES (Substring(@c, 1, Charindex(@split, @chttp://www.bj999.cn/yinchan/wh.html) - 1)) 26 27 SET @c = Stuff(@c, 1, Charindex(@split, @c), '') 28 END 29 30 INSERT @t 31 (col) 32 VALUES (@c) 33 34 RETURN 35 END 36 Go
二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果
1 /* 2 函 数 名:Get_StrArrayLength 3 函数作用:返回分割字符串的长度 4 函数参数: 5 @str ### 要分割的字符串 6 @split ### 分隔符号 7 示例: 8 Select dbo.Get_StrArrayLength('78,1,2,3',',') 9 返回结果: 10 4 11 */ 12 Select dbo.Get_StrArrayLength('78,1,2,3',',') 13 CREATE FUNCTION Get_StrArrayLength (@str VARCHAR(1024http://www.bj999.cn/yinchan/11249.shtml), 14 @split VARCHAR(10) 15 ) 16 returns INT 17 AS 18 BEGIN 19 DECLARE @location INT 20 DECLARE @start INT 21 DECLARE @length INT 22 23 SET @str=Ltrim(Rtrim(@str)) 24 SET @location=Charindex(@split, @str) 25 SET @length=1 26 27 WHILE @location <> 0 28 BEGIN 29 SET @start=@location + 1 30 SET @location=Charindex(@split, @str, @start) 31 SET @length=@length + 1 32 END 33 34 RETURN @length 35 END 36 Go
三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
1 /* 2 函 数 名:Get_StrArrayStrOfIndex 3 函数作用:按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便 4 函数参数: 5 @str ### 要分割的字符串 6 @split ### 分隔符号 7 @index ### 取第几个元素 8 示例: 9 Select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2) 10 返回结果: 11 9 12 */ 13 CREATE FUNCTION Get_StrArrayStrOfIndex(@str VARCHAR(1024), 14 4000 @split VARCHAR(10), 15 @index INT) 16 returns VARCHAR(1024) 17 AS 18 BEGIN 19 DECLARE @location INT 20 DECLARE @start INT 21 DECLARE @next INT 22 DECLARE @seed INT 23 24 SET @str=Ltrim(Rtrim(@str)) 25 SET @start=1 26 SET @next=1 27 SET @seed=Len(@split) 28 SET @location=Charindex(@split, @str) 29 30 WHILE @location <> 0 31 AND @index > @next 32 BEGIN 33 SET @start=@location + @seed 34 SET @location=Charindex(@split, @str, @start) 35 SET @next=@next + 1 36 END 37 38 IF @location = 0 39 SELECT @location = Len(@str) + 1 40 41 RETURN Substring(@str, @start, @location - @start) 42 END 43 Go
相关文章推荐
- PLSQL连接Oracle出现弹出空白框的原因,tnsnames.ora也不可修改,没有找到主机
- oracle测试题(持续更新)
- mysql的group by应用
- mongodb数据库引用DBRef
- Oracle的Opatch升级 11.2.0.4.0 到 11.2.0.4.7
- MySql 安装
- 十步优化SQL Server中的数据访问
- mongodb
- SQL Server链接服务器访问DB2设置步骤图解
- Hive 操作数据库语句总结
- Hive 创建数据库异常
- 【手把手教】主从MySql配置
- SQL Server中,Numric,Decimal,Money三种字段类型的区别
- sqlserver字段类型详解
- SqlParameter中的size
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- oracle的索引
- oracle的索引
- oracle的索引
- ORACLE常用