특정문자 기준으로 data 자르기 0 1 239

by 일곱난장이 [Oracle 기초] 특정문자 문자자르기 [2024.11.22 07:54:16]


안녕하십니까, 고수님들

특정문자 기준으로, 문자를 가져오는데...데이터가 많을 수록 속도 문제가 있는거 같습니다

다른 방법이 있을까요

select regexp_sustr(regexp_replace(:tezt_vl, '[^_0-9]', '', 1), '[^_], 1, 1)  -- 8888_99 --> 8888

      , regexp_sustr(regexp_replace(:tezt_vl, '[^_0-9]', '', 1), '[^_], 1, 2)  -- 8888_99 --> 99

from dual

 

 

by 마농 [2024.11.22 09:08:17]

○ 두가지 변환과정이 있네요.
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입