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;
最终执行结果集: