오라클로 정규식을 활용하는 쿼리를 작성중에있는데
정규식을 보다보니까 regexp_substr를 이용하여 잘라서 로우단위로 자를수가 있는 정보를 발견하여 해보았습니다.
우선
1 2 3 | select REGEXP_SUBSTR( '1,2,3,4,5|6,7' , '[^|]+' , 1, level ) from dual connect by instr( '1,2,3,4,5|6,7' , '|' , 1, level - 1) > 0; |
이렇게 하면 1,2,3,4,5|6,7을 [1,2,3,4,5] 와 [6,7]로 자를 수 있었습니다.
하다가보니 1,2,3,4,5,|,6,7을 ,|, 세가지의 구분자로 [1,2,3,4,5] 와 [6,7]로 자르고 싶은데 어떻게 해야 하나요??
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | WITH TMP AS ( SELECT 1 ID, '1,2,3,4,5|6,7' TXT FROM DUAL UNION ALL SELECT 2 ID, '1,2,3,4,5,|,6,7' TXT FROM DUAL UNION ALL SELECT 3 ID, '1,2,3|4,5,|,6,7' TXT FROM DUAL) SELECT A.ID , REGEXP_SUBSTR(A.TXT, '[0-9][0-9,]+[0-9]' , 1, B. NO ) STR FROM TMP A , ( SELECT LEVEL NO FROM DUAL CONNECT BY LEVEL <= 100 ) B WHERE B. NO <= LENGTH(A.TXT) - LENGTH( REPLACE (A.TXT, '|' , '' )) + 1 ORDER BY A.ID, B. NO ; |