Database/ms-sql

[MS-SQL] 문자열 분리 Split 함수(사용자 함수)

코딩for 2020. 11. 10. 14:22
반응형

 

 

 

MS-SQL 문자열 분리하여 가져오기 쿼리(사용자 함수, 프로시져)

 

문자열과, Split 할 문자, Select 할 인덱스 번호를 입력받아 Split 한 String 을 반환한다.

 

사용방법

 

 

split 사용방법

 

 

create        FUNCTION [dbo].[UF_GET_STRSPLIT]
(
    @iStrString  VARCHAR(MAX),		-- 전체 문자열
    @iStrDelim   VARCHAR(10),		-- 자를 문자열
    @iIntIndex   INT				-- select 인덱스
)
RETURNS VARCHAR(256) 
AS
BEGIN
    DECLARE @vStrRetVal NVARCHAR(256)
    DECLARE @vIntStrlen INT
    DECLARE @vIntDellen INT
    DECLARE @vIntCnt    INT
    DECLARE @vIntCnt2   INT
    DECLARE @vIntIndex  INT

    SET @vStrRetVal = ''
    SET @vIntStrlen = 0
    SET @vIntCnt    = 1
    SET @vIntCnt2   = 1
    SET @vIntIndex  = 1
    SET @vIntStrlen = LEN(@iStrString)
    SET @vIntDellen = LEN(@iStrDelim)
    SET @vIntCnt = CHARINDEX(@iStrDelim, @iStrString) 
    SET @vStrRetVal = SUBSTRING(@iStrString, 0, @vIntCnt)
    IF @vIntCnt > 0 BEGIN 
        WHILE @vIntCnt <= @vIntStrlen
        BEGIN
            IF @vIntIndex = @iIntIndex BEGIN
                RETURN @vStrRetVal
            END

            SET @vIntCnt2 = CHARINDEX(@iStrDelim, @iStrString, @vIntCnt+@vIntDellen) 
            IF @vIntCnt2 > 0 BEGIN
                SET @vStrRetVal = SUBSTRING(@iStrString, @vIntCnt+@vIntDellen, @vIntCnt2-@vIntCnt-@vIntDellen)
            END
            ELSE BEGIN
                SET @vStrRetVal = SUBSTRING(@iStrString, @vIntCnt+@vIntDellen, @vIntStrlen-@vIntCnt)
                IF @vIntIndex + 1 = @iIntIndex BEGIN
                    SET @vStrRetVal = SUBSTRING(@iStrString, @vIntCnt+@vIntDellen, @vIntStrlen-@vIntCnt)
                    RETURN @vStrRetVal
                END
                ELSE BEGIN
                    RETURN ''
                END
            END
            SET @vIntCnt = @vIntCnt2
            SET @vIntIndex = @vIntIndex + 1
        END
    END
    ELSE BEGIN
        IF @iIntIndex = 1 BEGIN
            SET @vStrRetVal = @iStrString
        END
        ELSE BEGIN
            SET @vStrRetVal = ''
        END
    END

    RETURN @vStrRetVal
END



반응형