第二篇 重要函数应用3

匿名 (未验证) 提交于 2019-12-02 23:43:01

进一步改造目标2: 可自定义连接符,而不局限只能是逗号(“,”)。

引用金蝶K3的行转列函数,功能更强,可以不限逗号;

/******************************************************************************

 * Function Name: fn_SplitStringToTable                                                                                      

 * Description:  拆分一个字符串       *

 ******************************************************************************/

ALTER  FUNCTION fn_SplitStringToTable

(

    @InputString VARCHAR(8000),

    @Delimeter   CHAR(1)

)

RETURNS @Table TABLE

(

    FSequence INT IDENTITY(1, 1),

    FValue    VARCHAR(511),

    FPosition INT,

    FLength   INT

)

BEGIN

    DECLARE @Position INT

    

    SELECT @Position = 1

    

    IF RIGHT(@InputString, LEN(@Delimeter)) <> @Delimeter

        SET @InputString = @InputString + @Delimeter

    

    WHILE SUBSTRING(@InputString, @Position, 1) = CHAR(10) OR

          SUBSTRING(@InputString, @Position, 1) = CHAR(13)

    BEGIN

        SELECT @Position = @Position + 1

    END

    

    WHILE @Position <= CHARINDEX(@Delimeter, @InputString, @Position)

    BEGIN

        INSERT INTO @Table(FValue, FPosition, FLength)

             VALUES (RTRIM(LTRIM(SUBSTRING(@InputString,

                                           @Position,

                                           CHARINDEX(@Delimeter,

                                                     @InputString,

                                                     @Position) - @Position))), @Position, CHARINDEX(@Delimeter, @InputString, @Position) - @Position)

        SELECT @Position = CHARINDEX(@Delimeter, @InputString, @Position) + 1

        

        WHILE SUBSTRING(@InputString, @Position, 1) = CHAR(10) OR

              SUBSTRING(@InputString, @Position, 1) = CHAR(13)

        BEGIN

            SELECT @Position = @Position + 1

        END

    END

    RETURN

END

GO

--测试

select * FROM dbo.fn_SplitStringToTable('SSSSSS,ASDF-ASDFASDF','-')

 

转载请标明出处:第二篇 重要函数应用3
文章来源: https://blog.csdn.net/tianyustat/article/details/91802785
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!