반응형
여러 문자열을 한 줄로 합치고 싶을 때 가장 먼저 떠올려야 할 함수는 바로 CONCAT()와 CONCAT_WS()이다.
실무에서 이름 조합, 로그 메세지 생성, CSV 형식 만들기, URL 생성 등에 자주 활용된다.

🧩 CONCAT() 함수 기본 개념
CONCAT(str1, str2, ...)
입력된 문자열을 모두 이어 붙여 하나의 문자열로 만든다.
SELECT CONCAT('My', 'SQL'); -- 결과: 'MySQL'
SELECT CONCAT('이름: ', '홍길동'); -- 결과: '이름: 홍길동'
⚠️ NULL이 하나라도 있으면 전체 결과가 NULL이 된다.
SELECT CONCAT('이름: ', NULL); -- 결과: NULL
이를 방지하려면 IFNULL() 또는 COALESCE()를 함께 쓰자.
SELECT CONCAT('이름: ', IFNULL(NULL, '없음')); -- 결과: '이름: 없음'
반응형
🧪 실습 예제
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
영문 이름을 성과 이름으로 합치거나, 한글에서는 "홍" + "길동"처럼 이름 전체를 구성할 때 자주 쓰인다.
🔸 CONCAT_WS()란?
CONCAT_WS(separator, str1, str2, ...)
WS = With Separator
구분자(sep)를 지정하고 문자열들을 연결하는 함수다.
SELECT CONCAT_WS('-', '2025', '07', '17'); -- 결과: '2025-07-17'
SELECT CONCAT_WS(', ', '김철수', '010-1234-5678', '서울');
-- 결과: '김철수, 010-1234-5678, 서울'
✅ NULL은 자동으로 무시되고 연결됨 (CONCAT과 다름!)
SELECT CONCAT_WS('-', 'A', NULL, 'C'); -- 결과: 'A-C'
🛠️ 실무 활용 팁
- 날짜, 전화번호, 주소, 코드 등을 구분자와 함께 문자열로 표현할 때 CONCAT_WS()가 유리함
- NULL 처리에 유연하므로 가변 필드 연결에 적합
- CONCAT()은 문자열 개수 제한 없음, 단 NULL 조심
💡 가변 컬럼 조합 예제
-- 이름, 부서, 직급을 하나의 문자열로 생성
SELECT CONCAT_WS(' / ', emp_name, dept_name, job_title) AS profile
FROM employee;
-- URL 파라미터 만들기
SELECT CONCAT('https://example.com/view?id=', user_id);
-- CSV용 문자열
SELECT CONCAT_WS(',', user_id, user_name, email);
반응형
⚠️ 주의사항 요약
| 항목 | CONCAT() | CONCAT_WS() |
| 구분자 사용 | 불가능 | 가능 (첫 인자에 명시) |
| NULL 처리 | NULL 전체 무효 | NULL 무시하고 연결 |
| 사용 예 | 이름, 문장 조합 | 날짜, CSV, 로그, 파라미터 등 |
🔍 마무리 요약
- CONCAT()는 단순 문자열 연결, NULL 포함 주의
- CONCAT_WS()는 구분자 추가 + NULL 무시 기능으로 실무 활용도 높음
- 실무에서는 IFNULL, COALESCE와 함께 쓰는 패턴이 많다
🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 문자열 패딩 함수: LPAD, RPAD 예제 중심 정리 (0) | 2025.07.19 |
|---|---|
| [MySQL] 문자열 치환 함수: REPLACE 실무 활용법 (1) | 2025.07.19 |
| [MySQL] 문자열 검색 함수: INSTR, LOCATE, POSITION 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 추출 함수: LEFT, RIGHT, SUBSTRING 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 길이 함수: LENGTH vs CHAR_LENGTH 정리 (3) | 2025.07.19 |
| [MySQL] (연결최적화6️⃣) 실무 연결 설정 체크리스트 총정리 (1) | 2025.07.19 |
| [MySQL] (연결최적화5️⃣) 커넥션 누수 원인 진단과 해결 전략 (1) | 2025.07.18 |
| [MySQL] (연결최적화4️⃣) 트랜잭션 전파 방식과 커넥션 이슈 분석 (0) | 2025.07.18 |