MSSQL에서 여러 문자열들을 합치는 방법에 대해 살펴보겠습니다.
+ 연산자
문자 또는 문자데이터 사이에 '+' 연산자를 입력하여 문자열들을 합칠 수 있습니다.
SELECT NAME + ' is ' + CONVERT(VARCHAR, AGE) + ' years old'
/*
NAME: 'Aiden'
AGE: 25
Result --> 'Aiden is 25 years old'
*/
💡+ 연산자는 반드시 문자자료형의 데이터끼리만 사용해야 합니다.
숫자자료형과 사용 시 에러 발생합니다.
NULL데이터와 연산하는 경우 결과는 무조건 NULL이 됩니다.
CONCAT
CONCAT 함수를 통해 나열된 파라미터들을 모두 붙여줄 수 있습니다.
💡CONCAT 함수는 SQL Server 2012 이상 버전부터 사용 가능합니다.
문법
CONCAT(String1, String2, String3, ...)
예시
SELECT CONCAT(NAME, ' is ', AGE, ' years old')
/*
NAME: 'Aiden'
AGE: 25
Result --> 'Aiden is 25 years old'
*/
💡CONCAT 함수는 파라미터가 문자 자료형이 아니어도 숫자, 날짜 등
문자로 변환될 수 있는 자료형이면 자동으로 변환되며 에러 발생하지 않습니다.
데이터가 NULL인 경우 ''으로 치환됩니다.
CONCAT_WS
CONCAT_WS 함수를 통해 나열된 파라미터들을 모두 특정구분자와 함께 붙여줄 수 있습니다.
💡CONCAT 함수는 SQL Server 2017 이상 버전부터 사용 가능합니다.
문법
CONCAT_WS(Separator, String1, String2, String3, ...)
/*
Separator: 문자열들을 붙일때 문자열 사이에 사용할 구분자
*/
예시
SELECT CONCAT_WS('@', E_MAIL, E_MAIL_DOMAIN)
/*
E_MAIL: 'Aiden1234'
E_MAIL_DOMAIN: 'tistory.com'
Result --> 'Aiden1234@tistory.com'
*/
SELECT CONCAT_WS(':', HOUR, MINUTE)
/*
HOUR: 11
MINUTE: 30
Result --> '11:30'
*/
💡CONCAT_WS 함수는 파라미터가 문자 자료형이 아니어도 숫자, 날짜 등
문자로 변환될 수 있는 자료형이면 자동으로 변환되며 에러 발생하지 않습니다.
데이터가 NULL인 경우 ''으로 치환됩니다.
무엇을 쓸까?
개인적으로 + 연산자는 문자자료형이 아니거나,
NULL인 데이터에 대한 처리를 해줘야 하는 번거로움이 있다고 생각합니다.
문자자료형이 확실하고, NULL인 데이터가 없는 게 확실하다면 + 연산자를 사용하고
그 외에는 CONCAT 함수를 쓰는 게 좋지 않을까 생각됩니다.
필자는 이럴때 저럴 때 따지지 않고 그냥 무조건 CONCAT함수를 쓰고 싶습니다.
하지만 회사에서 사용 중인 SQL Server 버전이 2008인 연고로... + 연산자만 쓰고 있네요