DB

[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

error: Content is protected !!