본문 바로가기

DB/mssql

[function] 구분자가 있는 문자열 테이블로 만들기



CREATE FUNCTION [dbo].[fn_Split]

(

    @pSource    NVARCHAR(MAX), 

    @pSeparator VARCHAR(1)

)

RETURNS @TAB_RETURN TABLE

(

    ItemIndex   INT,

    ItemValue   NVARCHAR(1000)

)

AS

BEGIN

    DECLARE @buffer VARCHAR(MAX);

    DECLARE @item   NVARCHAR(MAX); 

     

    DECLARE @tmp   INT;

    DECLARE @index INT; 

    SET @index = 1;

   

    WHILE LEN(@pSource) > 0

    BEGIN

        SET @tmp = CHARINDEX(@pSeparator, @pSource);

         

        IF @tmp > 0

        BEGIN

            SET @item    = SUBSTRING(@pSource, 1, @tmp - 1);

            SET @pSource = RIGHT(@pSource, LEN(@pSource) - @tmp);

            INSERT INTO @TAB_RETURN VALUES(@index, @item);

             

            SET @index = @index + 1;

        END ELSE

        BEGIN

            INSERT INTO @TAB_RETURN VALUES(@index, @pSource);

             

            BREAK;

        END;

    END;

      

    RETURN

END




예)


SELECT ItemIndex, ItemValue FROM dbo.fn_split('가,나,다,라,마,바,사',',')



result

ItemIndex | ItemValue

1             가

2             나

3             다

4             라

5             마

6             바

7             사