컬럼 문자열(,) 제거 1 3 886

by 달팽이스프 [Oracle 기초] 오라클 [2022.08.25 16:11:52]


안녕하세요. 데이터값 중간에 쉼표를 제거하고 싶습니다.

여러 컬럼값을 이어 붙였는데요. 컬럼과 컬럼 사이에 빈값이 있는 경우 쉼포를 제거 하고 싶습니다.

현재 결과값 : 과자,사과,,수박,,딸기

최종 결과값 :  과자,사과,수박,딸기

결과값을 세로로 반환한다음 널값을 제거 한 후 다시 가로로 반환하는 방법밖에 생각이 않나는데 다른 방법 있을까요?

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

by 신이만든지기 [2022.08.25 16:56:27]
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
      )

 


by 마농 [2022.08.25 17:15:57]
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
;

 


by 달팽이스프 [2022.08.26 09:26:47]

정규식이 있었군요.. 두분 다 감사합니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입