MySQL의 CONCAT_WS() 함수는 여러 문자열을 지정한 구분 기호로 연결해주는 유용한 함수입니다. 하지만 인수나 구분 기호 자리에 NULL이 포함되면 어떤 결과가 나오는지 상황별로 정확히 이해하는 것이 중요합니다. 아래에서 세 가지 경우를 예제와 함께 살펴보겠습니다.
1. 두 인수가 모두 NULL인 경우
CONCAT_WS() 함수의 인수로 NULL만 전달하면, MySQL은 빈 문자열(공백)을 반환합니다. 에러가 발생하지 않고 단순히 빈 결과가 출력된다는 점이 특징입니다.
예제
mysql> Select CONCAT_WS('',NULL,NULL);
+-------------------------+
| CONCAT_WS('',NULL,NULL) |
+-------------------------+
| |
+-------------------------+
1 row in set (0.00 sec)
2. 인수 중 하나만 NULL인 경우
인수 중 하나가 NULL이고 다른 하나는 실제 값이라면, MySQL은 NULL이 아닌 값만 출력합니다. 즉, CONCAT_WS() 함수는 NULL 값을 무시하고 나머지 유효한 문자열을 그대로 반환합니다.
예제
mysql> Select CONCAT_WS('',NULL,'Delhi');
+----------------------------+
| CONCAT_WS('',NULL,'Delhi') |
+----------------------------+
| Delhi |
+----------------------------+
1 row in set (0.00 sec)
mysql> Select CONCAT_WS('','Ram',NULL);
+--------------------------+
| CONCAT_WS('','Ram',NULL) |
+--------------------------+
| Ram |
+--------------------------+
1 row in set (0.00 sec)
위 예제에서 볼 수 있듯이, NULL이 첫 번째 인수든 두 번째 인수든 관계없이 유효한 값('Delhi' 또는 'Ram')만 정상적으로 출력됩니다.
3. 구분 기호 자리에 NULL이 있는 경우
반면, 구분 기호(separator) 자리에 NULL을 사용하면 결과는 완전히 달라집니다. 이 경우 MySQL은 NULL을 반환합니다. 구분 기호는 함수의 핵심 요소이기 때문에 NULL이 들어가면 전체 결과가 NULL이 되는 것입니다.
예제
mysql> Select CONCAT_WS(NULL, 'NEW','DELHI'); +--------------------------------+ | CONCAT_WS(NULL, 'NEW','DELHI') | +--------------------------------+ | NULL | +--------------------------------+ 1 row in set (0.00 sec)
정리
- 모든 인수가 NULL → 빈 문자열(공백) 반환
- 일부 인수만 NULL → NULL을 제외한 나머지 값 반환
- 구분 기호가 NULL → NULL 반환
이러한 동작 방식을 미리 알아두면, 데이터베이스에서 문자열을 조합할 때 NULL 처리 로직을 더 안전하게 설계할 수 있습니다.