SQL Basic

[MSSQL] STRING_SPLIT 함수

ssh9308 2022. 1. 23. 11:41
반응형

sql server 로 코딩을 하다보면 간혹 어떤 데이터의 값들을

특정한 기호로 나눠야 하는 경우가 생긴다.

이럴경우 로직단에서 나눠줘서 작업을 해도 상관없지만, 



db 단에서 작업을 하여 정리한다음에 로직단에 넘겨서

로직을 깔끔하게 정리 할 수 있다. 이럴 경우에 STRING_SPLIT 함수를 사용할 수 있다.


STRING_SPLIT 함수는 지정된 구분 기호 문자에 따라 



문자열을 부분 문자열의 행으로 분할하는 테이블 반환 함수이다.

STRING_SPLIT 에 대한 상세설명은 아래를 참고바란다.

 

 

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15 

 

STRING_SPLIT(Transact-SQL) - SQL Server

STRING_SPLIT 함수의 Transact-SQL 참조입니다. 이 테이블 반환 함수는 문자 구분 기호를 기준으로 문자열을 부분 문자열로 분할합니다.

learn.microsoft.com

 

 

예를들어 사용방법을 보자. STRING_SPLIT 함수에 문자열과 구분자를 지정해주면 된다.

 

변환된 값의 컬럼 이름은 values이다.

SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ')

즉, Lorem ipsum dolor sit amet. 값을 구분자 ' ' 로 나뉘었기 때문에 

 

아래와 같이 빨간막대를 기준으로 split 이 된다고 생각하면 되고 해당 값을 테이블 반환형식으로 표현해준다.

 

STRING_SPLIT 함수는 아래와 같이 응용할 수 있다.

SELECT * FROM dbo.TBLINSA WITH(NOLOCK)

위와 같은 TBLINSA 테이블이 존재할때 STRING_SPLIT 함수를 결합해보자.

 

DECLARE @data VARCHAR(100) = '1001,1006,1005'

SELECT 
	num,name,tel,jikwi
FROM STRING_SPLIT(@data,',') ss
INNER JOIN dbo.TBLINSA t WITH(NOLOCK) ON t.num = CONVERT(INT,ss.value)

결과를 보면 TBLINSA 테이블에서 num이 1001,1005,1006에 해당되는 데이터를 가져오는것을 볼 수 있다.

 

이런식으로 조인을 이용해서 응용도 가능하고 또한 서브쿼리를 이용해서 응용도 가능하다.

 

DECLARE @data VARCHAR(100) = '1001,1006,1005'

SELECT * FROM dbo.TBLINSA WITH(NOLOCK)
WHERE num IN (SELECT value FROM STRING_SPLIT(@data,','))

 

 

STRING_SPLIT 함수를 쓸때 주의할 점은 구분자로서 두글자 이상이 들어오게 되면 오류가 발생한다는 점이다.

 

SELECT value FROM STRING_SPLIT('apple@@banana@@kiwi','@@')

 

반응형