본문 바로가기
DataBase/mssql

STRING_SPLIT [파라미터 잘라서 활용하기]

by 노랑파랑 2023. 3. 2.
반응형

STRING_SPLIT

문자열을 지정된 구분 문자에 따라서 행으로 분할하는 테이블 반환 함수이다.

SQL Server 2016 (13.x) 이상 버전에서만 지원된다.

 

구문

STRING_SPLIT ( string , separator [ , enable_ordinal ] )

 

인자

string

         - 구분 문자로 자를 대상 문자열

separator

         - 구분 문자 (* 단일 문자 : varhar(1), char(1) ...)

enable_ordinal

         - Azure 또는 SQL Server 2022(16.x)부터 사용가능

         - 시퀀스 값을 출력 할지 말지 정하는 옵션 값. 1로 지정하면 1부터 시작되는 시퀀스 열이 출력된다.

 

사용법

기본 사용법은 매우 간단하다.

SELECT value FROM STRING_SPLIT('A,B,C,D',',')

 

 

다음 형식으로도 사용할 수 있다. 

WHERE절에서 사용

인자값을 구분자 포함 문자열을 받아 조건절에 사용해 필터 나 검색 등으로 사용할 수 있다.

DECLARE @tmp table(
	grade CHAR(1)
)
INSERT INTO @tmp
SELECT 'A'
INSERT INTO @tmp
SELECT 'B'
INSERT INTO @tmp
SELECT 'C'
INSERT INTO @tmp
SELECT 'D'


SELECT *
FROM @tmp
WHERE grade in (
			SELECT value
			FROM STRING_SPLIT('A,B',',')
			)

 

 

ORDER BY 사용

SELECT value
FROM STRING_SPLIT('B,D,A,C',',')
ORDER BY value

 

JOIN 하여 사용

테이블 반환 함수이기 떄문에 당연히 join 또는 cross apply등과 결합 할 수 있다.

DECLARE @tmp table(
	grade CHAR(1)
)
INSERT INTO @tmp
SELECT 'A'
INSERT INTO @tmp
SELECT 'B'
INSERT INTO @tmp
SELECT 'C'
INSERT INTO @tmp
SELECT 'D'


SELECT *
FROM @tmp AS tmp
INNER JOIN
	(
		SELECT value
		FROM STRING_SPLIT('B,D',',')
	) AS val
ON tmp.grade = val.value

 

사담..

파라미터 값을 조건절에서 사용할 때 LIKE 구문은 전방연산시 인덱스를 타지 않기 때문에 퍼포먼스가 매우 떨어져 사용하기 곤란하고, CHARINDEX경우는 WHERE절에 너무 많은 줄이 생기거나 특정 지정된 값을 검색할 때 사용했기 때문에,

위와 같이 전체 문자열이 일치하는 값을 찾아도 되는 경우면 사용해도 좋을것 같다.

반응형