SQL server的一个分割表值函数

 1 CREATE FUNCTION [dbo].[Fn_Split]
 2 (
 3     @SplitString text, -- 如果要传入NText类型,下面需要相应的修改,注释行为NText下同
 4     @Separator varchar(2) = ','-- NVarChar(2) = N','
 5 )
 6 RETURNS @SplitStringsTable TABLE
 7 (
 8     [id] int identity(1,1),
 9     [value] varchar(8000) -- NVarChar(4000)
10 )
11 AS
12 BEGIN
13     --------@CurrentIndex记录当前的Index的值,@NextIndex记录字符串中下一个Index的值-------
14     DECLARE @CurrentIndex int;
15     DECLARE @NextIndex int;
16     ------------@ReturnText:记录CurrentIndex处的字符到NextIndex之间的字符串-----------------
17     DECLARE @ReturnText varchar(8000);-- NVarChar(4000)
18     SELECT @CurrentIndex=1;----为@CurrentIndex赋初值
19     WHILE(@CurrentIndex<=DATALENGTH(@SplitString)) -- DATALENGTH(@SplitString)/2
20     BEGIN
21         SELECT @NextIndex=CHARINDEX(@Separator,@SplitString,@CurrentIndex);
22         IF(@NextIndex=0 OR @NextIndex IS NULL)
23             SELECT @NextIndex=DATALENGTH(@SplitString)+1;--DATALENGTH(@SplitString)/2
24         SELECT @ReturnText=SUBSTRING(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
25         INSERT INTO @SplitStringsTable([value])
26         VALUES(@ReturnText);
27         SELECT @CurrentIndex=@NextIndex+1;
28     END
29     RETURN;
30 END

EX:

SELECT FN.value
FROM fn_split('A/B/C/D/E', '/') FN

猜你喜欢

转载自www.cnblogs.com/evanmemo/p/8990218.html