REGEXP_REPLACE 정규식 사용이 원하는대로 안됩니다 4 131

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]

마농님 고맙습니다! 

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

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

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