dnt_split是一个字符串分割函数,输入待分割的字符串和分割符,输出分割后的字符串表
下边是注释,是自己理解.
CREATE FUNCTION [dnt_split] --字符串分割函数
(
@splitstring NVARCHAR(4000) , --输入需要分割的字符串和分割符
@separator CHAR(1) = ','
)
RETURNS @splitstringstable TABLE ( [item] NVARCHAR(200) ) --以表的形式返回分割后的字符串
AS
BEGIN
DECLARE @currentindex INT
DECLARE @nextindex INT
DECLARE @returntext NVARCHAR(200)
SELECT @currentindex = 1
--循环分割字符串。
WHILE ( @currentindex <= DATALENGTH(@splitstring) / 2 ) --DATALENGTH返回字符串的字节数,一个NVARCHAR字符占2位。除以2表示字符串的字母个数
BEGIN
SELECT @nextindex = CHARINDEX(@separator, @splitstring, --CHARINDEX为字符串检索函数,联机丛书上有介绍
@currentindex) --@currentindex为搜索的起始位置,
--@separator为分割符,@splitstring为待分割的字符串
--这一行为找出第一个匹配的位置@nextindex
IF ( @nextindex = 0
OR @nextindex IS NULL
)
SELECT @nextindex = DATALENGTH(@splitstring) / 2 + 1 --如果没有找到,设置位置为@splitstring的最后一位
SELECT @returntext = SUBSTRING(@splitstring, @currentindex,
@nextindex - @currentindex)
INSERT INTO @splitstringstable --将找出的结果插入到结果表中
( [item] )
VALUES ( @returntext )
SELECT @currentindex = @nextindex + 1 --移动搜索位置
END
RETURN --返回,跟C# 不一样。不用专门指定返回什么,在函数声明时已经指定了
END
GO