SYS_CONNECT_BY_PATH 관해 질문좀 드리겠습니다.. 0 7 3,987

by 손님 [SQL Query] SYS_CONNECT_BY_PATH 그룹 [2011.01.14 15:59:37]


SYS_CONNECT_BY_PATH 이용해서 

A,A,C
C,D,E
F,G,G

위와같이 나왔을경우...

중복된 값 즉.. A, A 와 G, G는 합쳐진 값..즉

A, C
C, D, E
F, G

위와 같이 뽑으려고 하는데...어떻게 해야 할까요 ㅠㅠ

도저히 생각이 안나서 문의 드립니다..도와주세요~
by 봉 [2011.01.14 16:54:59]
원리는 저도 모릅니다. 정규표현식은 찾아봐도 알기가 힘들더라고요

WITH TMP AS (
SELECT 'A,A,C' AS STR FROM DUAL UNION ALL
SELECT 'C,D,E' FROM DUAL UNION ALL
SELECT 'F,G,G' FROM DUAL
)
SELECT REGEXP_REPLACE(STR, '([A-Za-z]+)\S+\1', '\1')
FROM TMP

by 손님 [2011.01.14 17:23:25]
아..영어 문자로는 되는데 한글이 들어가면 안되네요 ㅠㅠ

그리고 위에는 간단하게 A B 이렇게 써놨는데요.. 진짜 데이터 값은 clob 값이고

조금 길어요 ㅠㅠ 아무튼 고맙습니다~

by 봉 [2011.01.14 17:29:20]
쿼리는 예를 들어서 한거고요..
이런게 있으니 도움이 되지 않을까? 라는 생각으로 작성한 거라 그대로 쓰면 안됩니다.

clob면 쿼리로 하기 힘들것 같습니다.
어떤 고정된 형식이 있어야 그것에 대한 반복여부를 판단할 수 있어서
일반 텍스트 라고 한다면 그 형식을 지정하는게 어려울 것 같네요

by v상이v [2011.01.14 18:06:43]
SELECT REGEXP_REPLACE(STR, '([^,]+)\S+\1', '\1')
FROM TMP

by camela [2011.01.17 13:15:40]
select regexp_replace(str,'(.+),\1','\1')
from tmp

\S => 이건 뭔가요? 콤마를 뜻하는 건가요?

by camela [2011.01.17 13:49:14]
\S 이게 공백이 아닌 문자에 대응되는 거군요.
REGEXP_REPLACE(STR, '([^,]+)\S+\1', '\1') => 여기서 \S+ 하셨는데,
+는 의미가 있는지 궁금하네요.
안써도 되는거 아닌지요?

요즘 정규식에 관심이 가는데 정규식은 찾아도 잘 안나오네요.
어디 예제 많이 나와 있는 곳 아시는데 있으신 분은 좀 가르쳐주세요~

by 마농 [2011.01.18 12:28:36]
데이터를 합치기 전에 미리 중복을 제거하시면 되죠.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입