오라클 정규식으로 반복 패턴 제거 .. 도와주세요 ㅠㅠ 0 6 961

by 꼬막 [SQL Query] 정규식 오라클 [2020.07.09 13:19:10]


20200708_184003.jpg (347,069Bytes)

안녕하세요 

정규식으로 반복 패턴을 제거하고 싶은데 마음처럼 되질 않아 질문 올립니다.

   WITH TEST AS (SELECT '10,20,10,94,10,94,10,94,10,94,10,94,10,94,10' T1 FROM DUAL UNION ALL SELECT '10,96,10,96,10,96,15' T1 FROM DUAL ) SELECT T1 ,REGEXP_REPLACE(T1,'([0-9]{2}\,[0-9]{2})(.+?)\1+$','\1\3') T2 FROM TEST; 

 

(숫자,숫자) 의 패턴이 중복될 때 (숫자,숫자) 의 중복을 제거 하고 싶은데요 T2 의 첫번째 행을 보면 중복제거가 되는데 두번째행은 중복제거가 되질 않아요 ㅠ 혹시 방법이 있을까요?

by pajama [2020.07.09 15:01:44]

다른 쿼리들 참고해봤는데.. 제가 한 방법은 이렇습니다.

 

WITH TEST AS (
SELECT '10,20,10,94,10,94,10,94,10,94,10,94,10,94,10' T1 FROM DUAL 
UNION ALL SELECT '10,96,10,96,10,96,15' T1 FROM DUAL
)
SELECT T1 ,
       REGEXP_REPLACE(T1,'([0-9]{2}\,[0-9]{2})(.+?)\1+$','\1\3') T2 ,
       REGEXP_REPLACE(T1,'([0-9]{2}\,[0-9]{2})(,\1)+(,|$)', '\1\3') T3
FROM TEST; 

by 꼬막 [2020.07.09 15:41:04]

앗 ! 

pajama 님 ^^ 너무너무 감사합니다. 정규식 너무 어려워요 ㅠ

덕분에 고민 덜었습니다 ^^


by pajama [2020.07.09 19:27:36]

도움 되셔서 다행입니다. 저도 참고한 것이라 잘 활용하지는 못합니다.


by 샤랄라 [2020.07.09 17:58:47]
pajama 님의 regexp_replace 를 참고해보았어요~

regexp_replace(t1, '([0-9]{2},[0-9]{2})(,\1)+', '\1')

by pajama [2020.07.09 19:26:16]

안녕하세요. 더 간결하고 좋은 방법같습니다. 저는 참고한 것이라 이해도가 높지 않아서요..


by 마농 [2020.07.10 08:05:27]

위 해결 방법은 숫자 2개 묶음이 여러번 반복되는 걸 찾는 해법인데.
1개가 반복된다거나? 10,10,10,10
3개 이상 묶음이 반복된다거나? 10,20,30,10,20,30
하는 부분도 해결되어야 할 것 같은 생각이 드는데요?
원하는 바가 위 해법으로 해결된게 맞는건지?
두개 묶음만 체크하면 되는 건지?

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