숫자만 들어오는 전화번호를 일정 규칙에 따라 공백으로 구분하고 싶어요
지역번호, 국번, 그냥번호
2-4자리, 3-4자리, 4자리 이런식으로 들어오면요
0211111111 -> 02 11111111
0315344567 -> 031 534 4567
07044444444 -> 070 44444444
050277777777 -> 050277777777
결과는 이렇게 어떻게든 공백포함 12자리를 만들고 싶은데요
RPAD를 이용해서 공백을 붙여주고 싶은데 국번과 그냥 번호를 어떻게 구분해야 할지 ㅠㅠ
아 지금은 없어졌나 봐요 옛날 데이터라 그런듯 ㅠ.ㅠ
-- 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개)로 끝나는 패턴을 찾아
첫번째 괄호로 변경
다시 설명하면
첫번째 괄호는 지역번호
두번째 괄호는 국번
세번째 괄호는 전화번호
를 의미하게 됩니다.