○ 두가지 변환과정이 있네요.
1. 숫자와 언더바가 아닌 문자 제거
2. 언더바를 기준으로 앞,뒤 문자 추출
○ 정규식 때문에 느리다면? 정규식이 아닌 일반 함수를 사용해 보세요.
1. 숫자와 언더바가 아닌 문자 제거 -> TRANSLATE
2. 언더바를 기준으로 앞,뒤 문자 추출 -> SUBSTR & INSTR
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 ;