[PostgreSQL] 여러개의 컬럼을 delimiter 와 함께 합치기

식빵·2023년 2월 6일
0

postgresql-memo

목록 보기
6/34
post-thumbnail

위에 보이는 3개의 정보를 컬럼값을 "-" 로 이어서 표현하고 싶습니다.
하지만 문제는 중간중간 보이는 값이 있거나 없는 컬럼이 존재한다는 점이다.
이럴때는 arrayarray_to_string 을 사용하면 쉽게 문제를 해결할 수 있습니다.



방법1: array_to_string

SELECT
	A.*,
	array_to_string(array[RAILLINE_NAME, RAILLINE_NAME2, RAILLINE_NAME3], '-') 
FROM TRAFFIC_INFO.RAIL_LINE  A 
WHERE 1=1
and 
	rail_type = 3
and (
	RAILLINE_NAME like '%' || '4호선' || '%'
	or RAILLINE_NAME2 like '%' || '4호선' || '%'
	or RAILLINE_NAME3 like '%' || '4호선' || '%'
) 
  • null 은 알아서 join 에서 빼줘서 편합니다.
  • 결과적으로 아래처럼 잘 나오는 것을 확인할 수 있습니다.



방법2: concat_ws

위 방법보다 심플한 방법으로 concat_ws 함수를 쓸 수 있습니다.
참고로 이 방식도 array_to_string 와 마찬가지로 null 은 무시하고 처리합니다.

with temp_01(a,b,c) as (values
    ('first(1)',   'middle(1)',   'last(1)'),
    (null,         'middle(2)',   'last(2)'),
    ('first(3)',    null,         'last(3)'),
    ('first(4)',   'middle(4)',    null    ),
    (null,          null,         'last(5)'),
    ('first(6)',    null,          null    ),
    (null,         'middle(7)',    null    ),
    (null,          null,          null    )
)
select concat_ws('-',a,b,c) -- "-" 라는 문자열을 구분자로 사용하여 문자열을 concat
from temp_01;

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글