REGEXP_REPLACE 정규식 사용이 원하는대로 안됩니다 0 4 1,553

by chrome [SQL Query] 정규표현식 [2019.03.13 12:24:47]


SELECT REGEXP_REPLACE(‘DF,DF,DFF,CD_ENG_NM,USE_YN,DF,AAA’,’(.*),’,’GROUPING(\1)’)

from dual;

쉼표 사이 단어들이 GROUPING(단어) 라고 바뀔거라는 기대를 했는데요.

현실은. 

GROUPING(DF,DF,DFF,CD_ENG_NM,USE_YN,DF)AAA 가 찍힙니다.

AAA야 뭐 마지막 처리 안했으니 그런데 , 앞부분이 엄한데서 짤리는겁니다?

 

그래서 치환문장을 GROUPING(\1) \2 \3 로 바꿔보니

결과가 GROUPING(DF,DF,DFF,CD_ENG_NM) USE_YN DF AAA

라고 나오네요;;; 

난 누군가 또 여긴 어딘가 ㅠㅜ

 

버전 : 오라클 11.2.0.4 입니다.

GROUPING_ID 로 조회하는 값도 2진배열 1,2,4,8 이 아닌 

엉뚱한 값부터 시작하던데 ... 

미묘하네요

 

by jkson [2019.03.13 13:09:18]

SELECT REGEXP_REPLACE('DF,DF,DFF,CD_ENG_NM,USE_YN,DF,AAA','([^,]+)','GROUPING(\1)')
FROM DUAL


by chrome [2019.03.13 13:17:57]

아!! 고맙습니다!

이거 참 오묘하네요 ㅋㅋㅋ

 


by 마농 [2019.03.13 13:47:47]

GROUPING_ID 의 결과같이 왜? 1,2,4,8 이 나와야 한다고 생각하신 건지?
롤업이나 큐브, GROUPING_ID 를 어떻게 사용했는지에 따라 결과는 천차만별로 달라질 것입니다.
어떤 규칙에 의해서 값이 나오는지를 이해하셔야 합니다.
http://gurubee.net/lecture/2679


by chrome [2019.03.13 14:56:43]

마농님 고맙습니다! 

오랜만에 쓰려니 "이거 이랬지 않나?" 라고 

거짓 기억이 생성되고 있어서 그랬습니다 ㅠㅜ

(얼마전 다큐를 봤는데, 기억은 저장되어있는게 아니라 다시 떠올릴때마다 새로 생성하는거라고 하대요. 그래서 조작 혹은 삭제가 가능하다고)

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