위에 보이는 3개의 정보를 컬럼값을 "-" 로 이어서 표현하고 싶습니다.
하지만 문제는 중간중간 보이는 값이 있거나 없는 컬럼이 존재한다는 점이다.
이럴때는 array
와 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
에서 빼줘서 편합니다.위 방법보다 심플한 방법으로 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;