您的位置:首页 > 数据库

SQL分割字符串函数(转)

2015-09-25 09:44 337 查看
SQL分割字符串函数SQL里类似Split的分割字符串函数

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


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