안녕하세요. 데이터값 중간에 쉼표를 제거하고 싶습니다.
여러 컬럼값을 이어 붙였는데요. 컬럼과 컬럼 사이에 빈값이 있는 경우 쉼포를 제거 하고 싶습니다.
현재 결과값 : 과자,사과,,수박,,딸기
최종 결과값 : 과자,사과,수박,딸기
결과값을 세로로 반환한다음 널값을 제거 한 후 다시 가로로 반환하는 방법밖에 생각이 않나는데 다른 방법 있을까요?
WITH TAB AS
(
SELECT '과자' AS A
, '사과' AS B
, '' AS C
, '수박' AS D
, '' AS E
, '딸기' AS F
FROM DUAL
)
SELECT A || ',' ||B ||',' || C || ',' || D ||','|| E||',' || F
FROM TAB
WITH TAB AS ( SELECT '과자' AS A , '사과' AS B , '' AS C , '수박' AS D, '' AS E, '딸기' AS F FROM DUAL union all SELECT '과자' AS A , '사과' AS B , '' AS C , '' AS D, '' AS E, '딸기' AS F FROM DUAL union all SELECT '' AS A , '사과' AS B , '' AS C , '수박' AS D, '' AS E, '딸기' AS F FROM DUAL union all SELECT '과자' AS A , '사과' AS B , '' AS C , '수박' AS D, '' AS E, '' AS F FROM DUAL ) select text , rtrim(ltrim(regexp_replace(text, ',+', ','), ','), ',') replace_comma , regexp_replace(regexp_replace(text, ',+', ','), '^,|,$', '') clean_comma from ( SELECT A || ',' ||B ||',' || C || ',' || D ||','|| E||',' || F as text FROM TAB )
WITH t AS ( SELECT '과자' a, '사과' b, '' c, '수박' d, '' e, '딸기' f FROM dual UNION ALL SELECT '', '사과', '', '수박', '', '딸기' FROM dual UNION ALL SELECT '', '사과', '', '수박', '딸기', '' FROM dual ) SELECT a, b, c, d, e, f -- 1. 널이 아닐때만 컴마 붙이기 + 맨앞 컴마 제거 , SUBSTR( NVL2(a, ','||a, '') || NVL2(b, ','||b, '') || NVL2(c, ','||c, '') || NVL2(d, ','||d, '') || NVL2(e, ','||e, '') || NVL2(f, ','||f, '') , 2) x1 -- 2. 3단계 replace 로 다중 컴마 제거 + 맨앞/맨뒤 컴마 제거 , TRIM(BOTH ',' FROM REPLACE(REPLACE(REPLACE( a||','||b||','||c||','||d||','||e||','||f , ',', '@,'), ',@', ''), '@', '')) x2 -- 3. 정규식을 이용한 다중컴마 제거 + 맨앞/맨뒤 컴마 제거 , REGEXP_REPLACE(REGEXP_REPLACE( a||','||b||','||c||','||d||','||e||','||f , ',+', ','), '^,|,$') x3 FROM t ;