개요
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.', '.')

성능
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.', '.')
예상 실행계획을 보면 사용자정의 함수의 성능이 나은 것으로 보입니다.

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