MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

SQL Server에서 여러 행(Row)의 컬럼 값을 하나로 합치기 위해서는 STUFF 함수와 FOR XML PATH 구문을 사용하면 된다. 오라클 SQL에서 XMLAGG, WM_CONCAT, LISTAGG 함수와 비슷한 기능을 수행한다.

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi
MSSQL 여러행 컬럼 합치기

SQL Server 2017 이상 버전을 사용한다면 STRING_AGG 함수를 사용하면 된다.

[MSSQL] STRING_AGG 함수 사용법 (컬럼 문자열 합치기)

SELECT a.job
     , STUFF((SELECT ',' + ename
                FROM emp
               WHERE job = a.job
                 FOR XML PATH('')
	   ), 1, 1, '') AS enames
  FROM emp AS a
 GROUP BY a.job

STUFF() 함수는 문자열을 자리수 만큼 특정문자로 치환하고 문자열로 리턴한다.

XML로 리턴된 결과의 첫번재 문자 ','을 빈문자로 치환하고 문자열로 변환한다.

STUFF("문자열", "시작위치", "문자길이", "치환문자")

사용 예제

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

서브쿼리로 데이터를 조회했기 때문에 GROUP BY를 사용하지 않아도 결과가 출력된다.

사용_예제_쿼리.txt

0.01MB

저작자표시

SQL Server에서 문자열을 합칠 때는 CONCAT 함수와 더하기(+) 연산자를 사용한다. 문자열을 합칠 때는 되도록이면 CONCAT 함수를 사용할 것을 권장하지만, 더하기 연산자를 사용하는 것이 더 익숙하기 때문에 더 많이 사용하는 듯하다. 더하기 연산자를 사용할 때는 주의사항이 있으니 아래를 참고하기 바란다.

CONCAT 함수 사용하여 문자열 합치기

SELECT CONCAT('SQL', 'Server', '2019')  AS str1
     , CONCAT(2021, 12, 31, 23, 59, 59) AS str2

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

CONCAT 함수는 많은 데이터베이스에서 사용 가능한 ANSI SQL 함수이며, CONCAT 함수에 입력된 값은 문자형으로 변환 후 합치는 작업이 이뤄진다. 숫자와 문자가 함께 입력되어도 오류가 발생하지 않는다.

CONCAT 함수의 문자 파라미터는 254개 까지 입력이 가능하다.

더하기(+) 연산자를 사용하여 문자열 합치기

SELECT 'SQL' + 'Server' + '2019'                 AS str1
     , '2021' + '12' + '31' + '23' + '59' + '59' AS str2

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

문자열을 합치 때 더하기 연산자를 가장 많이 사용할 것이다. 문자열과 문자열을 합칠 때는 문제가 발생하지 않지만 문자열과 숫자를 합칠 경우 오류가 발생할 수 있으니 아래를 참고하기 바란다.

※ 더하기(+) 연산자 사용 시 주의사항

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

문자열과 숫자를 더하기 연산자로 합치면 오류가 발생한다.

이런 경우 CONCAT 함수를 사용하면 오류가 발생하지 않으며, 더하기 연산자를 사용해야 할 경우 문자형으로 변환 후 합쳐야 오류가 발생하지 않는다.

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

숫자와 수치형 문자를 합 칠경 우 수치형으로 변환 후 더하기 연산을 한다.

문자열로 합쳐야 할 경우 문자형으로 변환 후 합쳐야 한다.

CONCAT_WS 함수 (구분자로 합치기)

SELECT CONCAT_WS(', ', 'SQL', 'Server', '2019') AS str1
     , CONCAT_WS('@', 'test', 'naver.com')      AS str2

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

CONCAT_WS("구분자", "문자열", "문자열", "문자열"...)

문자열을 특정 구분자로 합칠 때 유용하게 사용할 수 있다.

웹 개발을 하다보면 가끔 굳이 웹페이지로 구현하지 않고 DB에서만 데이터를 가공하여 추출 하는 경우가 많다.

아주 기본적인것중의 한가지이지만 사용해보지 않은 개발자들은 이렇게 있는지도 모를터...

-- 기본적인 쿼리

SELECT 컬럼1, 컬럼2 FROM 테이블

-- 컬럼(column) 연결 쿼리

SELECT 컬럼1 + 컬럼2 FROM 테이블

-- 컬럼(column) + 문자열

SELECT 컬럼1 + ' 연결되는 문자열 ' + 컬럼2 as test FROM 테이블

MSSQL 컬럼 합치기 - MSSQL keolleom habchigi

위와 같은 형태로 되는데 이 부분을 알고 있으면 유용하게 쓰이는 경우가 많다.

특이나 DB 마이그레이션(migration) 하거나 커스터마이징(Customizing)할때 DB to DB 로 이관할때 등등 굳이 안해도 될 절차를 생략하고 진행하기 수월하게 쓰인다.

저작자표시비영리변경금지

'웹 프로그래밍 Tip > ms-sql' 카테고리의 다른 글

mssql 테이블 존재여부 확인방법, 쿼리 실행문  (0) 2015.04.19
mysql,mssql,oracle DB의 테이블(ROW) 개수  (0) 2015.04.16
MSSQL 다중 INSERT INTO  (0) 2015.04.07
mssql 테이블 소유자 변경  (0) 2015.03.27
mssql 작은 따옴표(홑따옴표) 치환처리 방법  (0) 2015.03.27