주제

 

전화번호에서 '-' 를 분리하고 싶을때 사용한다.

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() 정규식이 필요할 때 - 유저의 모든테이블, 컬럼 검색, 특정테이블 제외

 

 

 

728x90

+ Recent posts