오라클로 정규식을 활용하는 쿼리를 작성중에있는데
정규식을 보다보니까 regexp_substr를 이용하여 잘라서 로우단위로 자를수가 있는 정보를 발견하여 해보았습니다.
우선
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]로 자르고 싶은데 어떻게 해야 하나요??
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;