[PostgreSQL] CONCAT(), concat_ws() 사용 예제 쿼리 (주소 컬럼 이어 붙이기)
ChatGpt에게 물었다. postgre sql 사용중이야.. select CONCAT(A.address_si,’ ‘, A.address_gungu,’ ‘, A.address_dong,’ ‘, A.address_detail) as FULL_ADDRESS from tb_user 위와 같이 주소 정보를 이어주고 있는데, 중간에 없는 데이터가 있을 경우 빈 공간이 여러개가 붙어 생길 수 있어.. 그래서 무조건 1개씩만 빈공간 생기게 해야해
[답변]
제가 정리하면:
null
+ 빈 문자열
둘 다 고려 → concat_ws + nullif
단순히 null
만 고려 → concat_ws
지금처럼 CONCAT()
으로 단순히 이어주면 null
이 들어오면 문자열이 깨지거나, 빈 값일 경우 공백이 여러 개 생겨버려요.
PostgreSQL에서는 이런 경우 concat_ws()
를 쓰는 게 딱이에요.
concat_ws(sep, col1, col2, ...)
sep
는 구분자 (여기서는' '
공백 하나)null
값은 무시됨 → 자동으로 중간에 공백 여러 개가 생기지 않음
SELECT
CONCAT_WS(' ', A.address_si, A.address_gungu, A.address_dong, A.address_detail) AS full_address
FROM tb_user A;
이렇게 하면
address_gungu
가 없거나null
이어도 → 공백은 하나만 유지됨- 값이 전혀 없으면 그 부분은 그냥 무시됨
예를 들어:
서울특별시 강남구 역삼동 123-45
서울특별시 역삼동 123-45
→ 자동으로서울특별시 역삼동 123-45
일부 값이 ''
(빈 문자열) 로 저장되어 있는 경우도 있나요?
그 경우는 nullif(column, '')
로 바꿔줘야 concat_ws
에서 무시할 수 있어요
SELECT
CONCAT_WS(' ',
NULLIF(A.address_si, ''),
NULLIF(A.address_gungu, ''),
NULLIF(A.address_dong, ''),
NULLIF(A.address_detail, '')
) AS full_address
FROM tb_user A;
이렇게 하면 null
뿐만 아니라 ''
빈 문자열도 자동 무시돼서, 공백이 딱 1개씩만 들어가요.
제가 정리하면:
- 단순히
null
만 고려 →concat_ws
null
+빈 문자열
둘 다 고려 →concat_ws + nullif