2016版本的 字符串分割函数

--1. 创建fn_Split函数. ( 切分字符串, 返回一个列名为id的表 )  

IF EXISTS(

       SELECT *

       FROM   dbo.sysobjects

       WHERE  id = OBJECT_ID('fn_Split')

              AND (TYPE = 'FN' OR TYPE = 'TF' OR TYPE = 'IF')

   )

    DROP FUNCTION fn_Split  

GO  

   

CREATE FUNCTION [dbo].[fn_Split]

(

    @str           VARCHAR(MAX),

    @separator     VARCHAR(10)

)

RETURNS TABLE

AS

    RETURN 

    (

        --Example:  SELECT id FROM fn_Split('a,b,d,c',',')  

        SELECT B.id

        FROM   (

                   (

                          --A 的作用只是生成 '<v>a</v><v>b</v><v>d</v><v>c</v>' 的XML格式的数据, 提供数据源 

                       SELECT [value] = CONVERT(XML, '<v>' REPLACE(@str, @separator, '</v><v>') + '</v>')

                   ) A 

                   OUTER APPLY

                   (

                          --B 的作用是将A中的 XML 数据的值枚举出来转换成行

                       SELECT id = N.v.value('.''varchar(100)'FROM   A.[value].nodes('/v') N(v)

                   ) B

               )

    )

GO

猜你喜欢

转载自blog.csdn.net/leo_lesley/article/details/82682371