SQL Server字符串分割函数Split

 1 USE [QuickFrame_FIQS];
 2 GO
 3 /****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 2018/8/14 16:41:04 ******/
 4 SET ANSI_NULLS ON;
 5 GO
 6 SET QUOTED_IDENTIFIER ON;
 7 GO
 8 
 9 --功能:字符串分割函数
10 --描述 :返回分割后的数据表记录
11 --编制人:Denghejing
12 --编制时间:2018.08.14
13 
14 /*
15 --因为这个函数创建的时候默认为以 逗号 分割,所以只需要使用 default 关键字就可以了
16 select * from Split(default,'123,456,789')
17 select * from Split(default,'123,456,789,')
18 
19 --其它字符分割
20 select * from Split('abc','11111abc22222abc33333')
21 select * from Split('abc','11111abc22222abc33333abc')
22 */
23 
24 ALTER FUNCTION [dbo].[Split]
25 (
26     @separator VARCHAR(64) = ',',
27     @string NVARCHAR(MAX)
28 )
29 RETURNS @ResultTab TABLE
30 (
31     Id INT,
32     Result NVARCHAR(500)
33 )
34 AS
35 BEGIN
36     DECLARE @Num INT;
37 
38     IF (@string IS NOT NULL AND @string <> '' AND LEN(@string) > 0)
39     BEGIN
40         IF (CHARINDEX(@separator, @string) > 0) --判断要截取的字符是否存在
41         BEGIN
42             SET @Num = 0;
43             WHILE (CHARINDEX(@separator, @string) > 0) --如果要截取的字符存在,就继续循环
44             BEGIN
45                 SET @Num = @Num + 1;
46                 INSERT INTO @ResultTab
47                 (
48                     Id,
49                     Result
50                 ) --截取字符串,插入表变量
51                 SELECT @Num,
52                        LEFT(@string, CHARINDEX(@separator, @string) - 1);
53 
54                 --把已经截取并插入的字符串删除
55                 SET @string = STUFF(@string, 1, CHARINDEX(@separator, @string) - 1 + LEN(@separator), '');
56             END;
57 
58             --如果最后一个截取的字符串为空,那就不插入了
59             --例如:'123,456,789,' 这样的字符串最后剩下的就是空字符串了
60             IF (@string IS NOT NULL AND @string <> '')
61             BEGIN
62                 INSERT INTO @ResultTab
63                 (
64                     Id,
65                     Result
66                 )
67                 SELECT @Num + 1,
68                        @string;
69             END;
70         END;
71         ELSE
72         BEGIN
73             DELETE FROM @ResultTab;
74         END;
75     END;
76     ELSE
77     BEGIN
78         DELETE FROM @ResultTab;
79     END;
80     RETURN;
81 END;

最终执行结果集:

猜你喜欢

转载自www.cnblogs.com/Denghejing/p/9475587.html