오라클 문자열에서 전화번호 모두 뽑아오기

with t as (
select '울릉도 동남쪽 뱃길따라 200리, 전화  : 02-1234-1234, 휴대폰 : 010-4567-1234' txt from dual
)
SELECT regexp_substr(txt,'0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}', 1, level) as result
  FROM t
  connect by regexp_substr(txt,'0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}', 1, level) is not null  
; 
--출처 : http://oracleclub.com/article/57413
with t as (
select 1 num, '울릉도 동남쪽 뱃길따라 200리, 전화  : 02.1234.1234, 휴대폰 : 010-4567-1234' txt from dual
UNION ALL select 2, '서울시 영등포구 여의도1동, 전화  : 02-1111-2222, 휴대폰 : 010.3333.4444, 010-2222-3333' txt from dual
UNION ALL select 3, '서울시 영등포구 여의도2동, 전화  : 031-2222-5555, 휴대폰 : 010-3231-6666' txt from dual
UNION ALL select 4, '서울시 영등포구 여의도3동, 전화  : 042-3333-4444, 휴대폰 : 010.777.1344' txt from dual
)
SELECT num, lv
     , regexp_substr(txt, '0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}', 1, lv) AS result
  FROM (SELECT num, REPLACE(txt, '.', '-') txt FROM t)
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL < 9)
 WHERE regexp_substr(txt, '0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}', 1, lv) IS NOT NULL
-- WHERE lv <= regexp_count(txt, '0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}') -- 11G
 ORDER BY num, lv
;
문자열 중에서 전화번호 패턴의 형식은 모두 뽑아옴
참고 : regexp_count – 정규식 패턴과 일치하는 문자열 개수를 반환 – 문법 : REGEXP_COUNT (source_char, pattern [, position [, match_param]]) – 예제
SELECT REGEXP_COUNT('123123123123', '123', 3, 'i') COUNT FROM DUAL; 

     COUNT
----------
         3
자세한 내용은 아래사이트 참조 http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions147.htm#SQLRF20014

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다