○ 두가지 변환과정이 있네요.
1. 숫자와 언더바가 아닌 문자 제거
2. 언더바를 기준으로 앞,뒤 문자 추출
○ 정규식 때문에 느리다면? 정규식이 아닌 일반 함수를 사용해 보세요.
1. 숫자와 언더바가 아닌 문자 제거 -> TRANSLATE
2. 언더바를 기준으로 앞,뒤 문자 추출 -> SUBSTR & INSTR
1 2 3 4 5 6 7 8 9 10 11 12 13 | WITH t AS ( SELECT '8888_99' tezt_vl FROM dual UNION ALL SELECT 'a8888_99b' FROM dual UNION ALL SELECT '8888' FROM dual ) SELECT tezt_vl , REGEXP_SUBSTR(REGEXP_REPLACE(tezt_vl, '[^_0-9]' ), '[^_]+' , 1, 1) v1 , REGEXP_SUBSTR(REGEXP_REPLACE(tezt_vl, '[^_0-9]' ), '[^_]+' , 1, 2) v2 , TRANSLATE(SUBSTR(tezt_vl, 1, INSTR(tezt_vl|| '_' , '_' ) - 1), '_0123456789' ||tezt_vl, '_0123456789' ) x1 , TRANSLATE(SUBSTR(tezt_vl, INSTR(tezt_vl|| '_' , '_' ) + 1), '_0123456789' ||tezt_vl, '_0123456789' ) x2 FROM t ; |