본문 바로가기

SQL/도움말 팁들!

[MSSQL] 문자열 자르는 함수

여러 아이디 값이나 변수를 배열처럼 넘겨서 사용하고 싶을 때가 간혹 있다. 뭐 이런 형태로 변수를 넘겨서 받아 사용하고 싶을 때 유용한 함수이다. (ex. 100,90,88,105,300,412,938,... )




 CREATE FUNCTION [dbo].[UF_TEXT_SPLIT] 

( 

    @TEXT       VARCHAR(8000) 

    ,@DELIMITER CHAR(1) 

) 

RETURNS @STRINGS TABLE 

( 

    POSITION INT IDENTITY(1,1) PRIMARY KEY,  

    VALUE NVARCHAR(MAX) 

) 

AS 

BEGIN 

     

    DECLARE @INDEX  INT 

     

     

    SET @INDEX = -

     

    WHILE (LEN(@text) > 0) 

    BEGIN 

        SET @INDEX = CHARINDEX(@DELIMITER , @TEXT) 

         

        IF (@INDEX = 0) AND (LEN(@TEXT) > 0) 

        BEGIN 

            INSERT INTO @STRINGS VALUES (@TEXT) 

            BREAK 

        END 

         

        IF (@INDEX > 1) 

        BEGIN 

            INSERT INTO @STRINGS VALUES (LEFT(@TEXT, @INDEX - 1)) 

            SET @TEXT = RIGHT(@TEXT, (LEN(@TEXT) - @INDEX)) 

        END 

        ELSE 

            SET @TEXT = RIGHT(@TEXT, (LEN(@TEXT) - @INDEX))  

    END 

 

RETURN    

END 

 


이렇게 만든 후에 샘플로 돌려보자.




 SELECT * FROM UF_TEXT_SPLIT('100,90,88,105,300,412,938', ',')

GO

 

SELECT * FROM UF_TEXT_SPLIT('강동원@지상렬@차인표@고승덕', '@')

GO



그 결과는?