SQL Server 2005+ 使用 CTE 分割字符串

记录一下,效率比旧的字符串分割效率高

ALTER FUNCTION [dbo].[UF_SpliteIntToTable] 

    @String VARCHAR(8000) 

RETURNS @Table TABLE (Id INT

AS 

BEGIN 

    DECLARE @SpliteChar AS CHAR(1) = ','

         

    WITH TempTable AS 

    ( 

        SELECT CAST(SUBSTRING(@String,1,CHARINDEX(@SpliteChar,@String,1) - 1) AS INTAS item, 

        SUBSTRING(@String,CHARINDEX(@SpliteChar,@String,1) + 1, LEN(@String)) + @SpliteChar AS list 

 

        UNION ALL 

 

        SELECT CAST(SUBSTRING(list,1,CHARINDEX(@SpliteChar,list,1) - 1) AS INTAS item, 

        SUBSTRING(list,CHARINDEX(@SpliteChar,list,1) + 1, LEN(list)) AS list 

        FROM TempTable 

        WHERE LEN(TempTable.list) > 0 

    ) 

 

    INSERT INTO @Table SELECT item FROM TempTable WHERE item > 0 

         

    RETURN 

END 

你可能感兴趣的:(sql,server,String,list)