-- 050x-xxx-xxxx 평생번호인지 인터넷전화인지 하는게 있긴 하네요. WITH t AS ( SELECT '0211111111' tel FROM dual UNION ALL SELECT '0315344567' FROM dual UNION ALL SELECT '07044444444' FROM dual UNION ALL SELECT '05027777777' FROM dual ) SELECT tel , RPAD(REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\1'), 4, ' ') || RPAD(REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\2'), 4, ' ') || RPAD(REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\3'), 4, ' ') AS tel_1 , RPAD(REGEXP_REPLACE(tel, '^(02|050.|0..)(.{3,4})(.{4})$', '\1'), 4, ' ') || RPAD(REGEXP_REPLACE(tel, '^(02|050.|0..)(.{3,4})(.{4})$', '\2'), 4, ' ') || RPAD(REGEXP_REPLACE(tel, '^(02|050.|0..)(.{3,4})(.{4})$', '\3'), 4, ' ') AS tel_2 FROM t ;
=== 정규식 기본 ===
^ : 시작
(괄호) : 패턴 묶음
| : OR
. : 임의의 문자
{m,n} : 앞에서 지정한 문자열의 반복 횟수 m ~ n 사이
\n : 앞에서 사용된 n번째 괄호안의 패턴문자열
$ : 끝
=== 사용된 정규식 설명 ===
REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\1')
(02 또는 0xx)로 시작하여
(임의의 문자 3~4개)가 연결되고
(임의의 문자 4개)로 끝나는 패턴을 찾아
첫번째 괄호로 변경
다시 설명하면
첫번째 괄호는 지역번호
두번째 괄호는 국번
세번째 괄호는 전화번호
를 의미하게 됩니다.