MSSQL STRING_SPLIT 대체 함수

개요

MSSQL STRING_SPLIT 대체함수 입니다. STRING_SPLIT 함수는 MSSQL 2016 이상 버전에서만 동작해서, 이전 버전에서는 동일한 기능을 사용하려면 사용자정의 함수를 만들어서 사용해야 합니다.

MSSQL STRING_SPLIT 대체 함수 소스

CREATE FUNCTION [dbo].[UF_STRING_SPLIT]
(
    @INPUT NVARCHAR(4000),
    @DELIM NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
    WITH CTE(ST_POS, END_POS)
    AS(
        SELECT 0 AS ST_POS, CHARINDEX(@DELIM,@INPUT) AS END_POS
        UNION ALL
        SELECT END_POS+1, CHARINDEX(@DELIM,@INPUT,END_POS+1)
            FROM CTE
            WHERE END_POS > 0
    )
    SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
        'Value' = SUBSTRING(@INPUT,ST_POS,COALESCE(NULLIF(END_POS,0),LEN(@INPUT)+1)-ST_POS)
    FROM CTE
)

테스트

SELECT * FROM DBO.UF_STRING_SPLIT('AA.BB.CC.DD.', '.')
mssql string_split 대체 함수 실행 결과

성능

SELECT * FROM DBO.UF_STRING_SPLIT('AA.BB.CC.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.', '.')

SELECT * FROM string_split('AA.BB.CC.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.DD.', '.')

예상 실행계획을 보면 사용자정의 함수의 성능이 나은 것으로 보입니다.

mssql string_split 대체 함수의 성능

참조 : https://www.mssqltips.com/sqlservertip/4884/sql-server-2016-stringsplit-function/
STRING_SPLIT 함수 사용법

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다