전화번호 포맷 정규식 0 4 121

by idoris [2020.03.25 18:01:17]


전화번호 형식을 체크하여,

최종적으로는 전화번호 포맷에 맞혀서 데이터를 뽑으려고 합니다.

검색해보니, 아래와 같은 정규식으로 구현이 가능한 듯 한데..

문제는 1588-xxxx 등의 전화번호는 아래 정규식으로 처리가 안되는 것 같습니다.

위 조건을 만족하도록, 아래 쿼리 수정해 주셔도 되고,

새 쿼리 만들어주셔도 됩니다. 

꼭 좀 도움 부탁드리겠습니다.

감사합니다!!

 

WITH temp_table AS (
SELECT '027891234'   tel_no FROM dual UNION ALL
SELECT '0314567890'  tel_no FROM dual UNION ALL
SELECT '01023456789' tel_no FROM dual
)

SELECT tel_no
     , REGEXP_REPLACE(tel_no, '(02|.{3})(.+)(.{4})', '\1-\2-\3') tel_no2
  FROM temp_table

by pajama [2020.03.25 19:28:00]

정규식 하나로 다 커버되진 않을 것 같은데..case로 분기하면 되지 않을까요?

WITH temp_table AS (
SELECT '027891234'   tel_no FROM dual UNION ALL
SELECT '0314567890'  tel_no FROM dual UNION ALL
SELECT '01023456789' tel_no FROM dual UNION ALL
SELECT '15880001'    tel_no FROM dual
)
SELECT tel_no
     , CASE WHEN SUBSTR(tel_no, 1, 1) = '0' THEN REGEXP_REPLACE(tel_no, '(02|.{3})(.+)(.{4})', '\1-\2-\3') 
            WHEN SUBSTR(tel_no, 1, 1) = '1' THEN REGEXP_REPLACE(tel_no, '(1544|1566|1577|1588)([0-9]{4})', '\1-\2')  END tel_no2
  FROM temp_table

 


by 마농 [2020.03.25 21:55:39]
WITH temp_table AS
(
SELECT '027891234' tel_no FROM dual
UNION ALL SELECT '0314567890'  FROM dual
UNION ALL SELECT '03234567890' FROM dual
UNION ALL SELECT '01023456789' FROM dual
UNION ALL SELECT '15771234'    FROM dual
)
SELECT tel_no
     , REGEXP_REPLACE(REGEXP_REPLACE(tel_no
       , '^(02|0..)', '\1-')    -- 맨 앞자리가 02 이거나 0xx 인 거 찾아서 뒤에 - 붙여주고
       , '(....)$'  , '-\1')    -- 맨 뒷자리 4개 앞에 - 붙여주기
       AS tel_no2
  FROM temp_table
;

 


by idoris [2020.03.25 22:45:22]

두분 모두 정말 감사합니다.!!^^


by pajama [2020.03.25 23:01:27]

크~역시 감탄하고갑니다.

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