반응형
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절에 너무 많은 줄이 생기거나 특정 지정된 값을 검색할 때 사용했기 때문에,
위와 같이 전체 문자열이 일치하는 값을 찾아도 되는 경우면 사용해도 좋을것 같다.
반응형
'DataBase > mssql' 카테고리의 다른 글
[MSSQL] 컬럼 검색하기 (0) | 2023.07.05 |
---|---|
MSSQL : FORMAT함수 (0) | 2023.06.07 |
CONVERT, FORMAT함수 : 날짜(DATE) 포맷 변환 (0) | 2023.06.02 |
SQL Server의 OUTPUT 절: 데이터 변경 작업의 결과 추적 및 활용 (0) | 2023.05.23 |
MSSQL DATEDIFF 함수를 활용한 날짜 간격 계산 (1) | 2023.05.19 |