SQL을 쓰다보면 하나의 열에 여러개의 데이터를 넣어야 할 때가 있습니다.
항목이 정해져 있다면, 예를 들어 5개라고 하면 Column을 Data1, 2, 3, 4, 5 이런식으로 관리하면 될텐데
가변적이라면 Col1, Col2, Col3, --- , Col199, Col200 이런식으로 Column 수를 크게 늘려서 사용하기도 하죠.
저는 이런 방식 때문에 한 Column에 데이터를 컴마(,)로 연결해서 붙여서 데이터를 찢어서 쓰는데요.
어플리케이션에 데이터를 받고 나눠서 쓰는 방법도 있지만 SQL 쿼리 단에서 찢어서 사용하는 방법도 있어서 소개합니다.
SQL Server 2012 (12.xxx 버전) 이하일 경우
https://stackoverflow.com/questions/46902892/string-split-in-sql-server-2012
STRING_SPLIT in SQL Server 2012
I have this parameter @ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20' I want to do something to split the comma-separated values. The string_split function doesn't work and I...
stackoverflow.com
조금 복잡한데 XML을 이용하여 나누는 함수입니다.
SQL Server 2016 (16.xxx 버전) 이하일 경우 OPENJSON이라는 내장 함수를 사용합니다.
아래는 샘플코드 입니다.
SELECT S.[value]
FROM [POP].[dbo].tbPTransfer AS A
INNER JOIN tbDVData AS B ON A.PLAN_PROD_NO = B.PLAN_PROD_NO AND A.ITEM_BASE = B.ITEM_BASE
CROSS APPLY OPENJSON('["' + REPLACE(B.DV_DATA,',','","') + '"]') AS S
WHERE S.[key] = @DV_NO - 1 AND S.[value] != ''
위의 코드는 tbPTransfer 라는 테이블과 tbDVData라는 테이블을 join하고 tbDVData의 DV_DATA라는 Column을 찢습니다.
그리고 @DV_NO라는 숫자를 이용하여 특정 위치에 있는 데이터만 빼오죠.
SQL Server 2016 이후 버전부터는 내장함수인 STRING_SPLIT을 사용하면 됩니다.
STRING_SPLIT(Transact-SQL) - SQL Server
STRING_SPLIT 함수의 Transact-SQL 참조입니다. 이 테이블 반환 함수는 문자 구분 기호를 기준으로 문자열을 부분 문자열로 분할합니다.
learn.microsoft.com