주제
전화번호에서 '-' 를 분리하고 싶을때 사용한다.
REGEXP_SUBSTR()
예전에 INSTR, SUBSTR을 써가면서 분리했던거 같은데 정규식을 사용하는 것이 속도도 빠르고 간단하다.
이메일 등에도 적용하면된다.
사용
REGEXP_SUBSTR(대상 문자열, 정규식, 문자열 시작점, 정규식이 적용되어 분리된 문자열 순서를 나타내는 수)
방법
-- 문자열 TEL_NO 중에서 -가 아닌 문자열 중 정규식이 적용되어 분리된 첫번째 문자열을 가져온다.
REGEXP_SUBSTR(TEL_NO, '[^-]+', 1, 1) AS RS01
WITH TMP_TABLE AS (
SELECT '010-1234-5678' AS TEL_NO
FROM DUAL
)
SELECT TEL_NO,
SUBSTR(TEL_NO, 1, INSTR(TEL_NO, '-', 1, 1) - 1) AS SI01,
SUBSTR(TEL_NO, INSTR(TEL_NO, '-', 1, 1) + 1, (INSTR(TEL_NO, '-', 1, 2) - INSTR(TEL_NO, '-', 1, 1)) - 1) AS SI02,
SUBSTR(TEL_NO, INSTR(TEL_NO, '-', 1, 2) + 1, LENGTH(TEL_NO) - 1) AS SI03,
REGEXP_SUBSTR(TEL_NO, '[^-]+', 1, 1) AS RS01,
REGEXP_SUBSTR(TEL_NO, '[^-]+', 1, 2) AS RS02,
REGEXP_SUBSTR(TEL_NO, '[^-]+', 1, 3) AS RS03
FROM TMP_TABLE;
질의 결과>
TEL_NO SI01 SI02 SI03 RS01 RS02 RS03
010-1234-5678 010 1234 5678 010 1234 5678
참고
오라클 문서
INSTR
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions068.htm
SUBSTR
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions162.htm
REGEXP_SUBSTR
REGEXP_SUBSTR extends the functionality of the SUBSTR function by letting you search a string for a regular expression pattern. It is also similar to REGEXP_INSTR, but instead of returning the position of the substring, it returns the substring itself. This function is useful if you need the contents of a match string but not its position in the source string. The function returns the string as VARCHAR2 or CLOB data in the same character set as source_char.
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions131.htm
정규식 관련 글
[Oracle] LIKE 대신 REGEXP_LIKE() 정규식이 필요할 때 - 유저의 모든테이블, 컬럼 검색, 특정테이블 제외
'Software > Oracle' 카테고리의 다른 글
[Oracle] (정규식) 문자열에서 특정 문자 개수 구하기 - REGEXP_COUNT (0) | 2022.04.29 |
---|---|
[Oracle] PROCEDURE 실행하는 방법 - 두가지, PACKAGE (0) | 2022.04.09 |
[Oracle] ORA-28001: 비밀번호가 만기되었습니다. - The password has expired, 패스워드 파기일(EXPIRY_DATE) 제한 풀기 (0) | 2022.01.12 |
[Oracle] NULL 정렬 순서 정하기 - ORDER BY (0) | 2021.11.09 |
[Oracle] 테이블 컬럼 두개 이상 수정하기 - ALTER, MODIFY (0) | 2021.11.04 |