Discuz!NT 代码阅读笔记(9)DNT数据库中唯一的用户函数解析

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

Technorati 标签: DNT,字符串分割,函数
原文地址:https://www.cnblogs.com/zyqgold/p/1772290.html