중복제거 정규식 질문... 1 1 857

by HappyOra [2018.05.22 19:58:43]


, 로 반복되는 문자열에서 중복되는값 제거할수 있을까요?

자리수는 고정 아니고요

예) 아래에서 123은 반복되므로 하나만 남기고 제거.

123, 456, 123, 678, 123

=> 123, 456, 678

 

SELECT 
  regexp_replace( '535,535,536,535', '([^,]+)(,\1)+', '\1') 
FROM DUAL;

이렇게 했더니 연속되면 제거 되는데 다른값이 중간에 있으면 제거가 안되네요. ㅜㅜ

 

 

 

by 마농 [2018.05.23 09:19:45]
WITH t AS
(
SELECT 1 pk, '123, 456, 123, 678, 123' v FROM dual
UNION ALL SELECT 2, '456,123' FROM dual
)
-- 쪼개고, 중복제거한 뒤, 다시 합치기
SELECT pk
     , LISTAGG(v, ', ') WITHIN GROUP(ORDER BY lv) v
  FROM (SELECT pk
             , REGEXP_SUBSTR(v, '[^, ]+', 1, lv) v
             , MIN(lv) lv
          FROM t
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
         WHERE lv <= REGEXP_COUNT(v, '[^, ]+')
         GROUP BY pk
             , REGEXP_SUBSTR(v, '[^, ]+', 1, lv)
        )
 GROUP BY pk
 ORDER BY pk
;

 

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