숫자만 들어오는 전화번호 공백으로 구분하기 0 7 2,635

by snpo 전화번호 [2014.10.17 10:46:54]


숫자만 들어오는 전화번호를 일정 규칙에 따라 공백으로 구분하고 싶어요 

지역번호, 국번, 그냥번호

2-4자리, 3-4자리, 4자리 이런식으로 들어오면요

0211111111 -> 02  11111111

0315344567 -> 031 534 4567

07044444444 -> 070 44444444

050277777777 -> 050277777777

 

결과는 이렇게 어떻게든 공백포함 12자리를 만들고 싶은데요

RPAD를 이용해서 공백을 붙여주고 싶은데 국번과 그냥 번호를 어떻게 구분해야 할지 ㅠㅠ

 

by 마농 [2014.10.17 11:36:55]

4자리 지역번호도 있던가요???


by snpo [2014.10.17 12:14:11]

아 지금은 없어졌나 봐요 옛날 데이터라 그런듯 ㅠ.ㅠ


by 마농 [2014.10.17 13:25:31]
-- 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
;

 


by snpo [2014.10.17 13:59:35]

감사합니다!


by 오라클초보 [2014.10.17 15:23:41]

마농님 정규표현식

REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\1')

이게 어떻게 되는 건지 설명 부탁드려도 될까요??


by 마농 [2014.10.17 15:52:37]

=== 정규식 기본 ===
^ : 시작
(괄호) : 패턴 묶음
| : OR
. : 임의의 문자
{m,n} : 앞에서 지정한 문자열의 반복 횟수 m ~ n 사이
\n : 앞에서 사용된 n번째 괄호안의 패턴문자열
$ : 끝


=== 사용된 정규식 설명 ===
REGEXP_REPLACE(tel, '^(02|0..)(.{3,4})(.{4})$', '\1')
(02 또는 0xx)로 시작하여
(임의의 문자 3~4개)가 연결되고
(임의의 문자 4개)로 끝나는 패턴을 찾아
첫번째 괄호로 변경
다시 설명하면
첫번째 괄호는 지역번호
두번째 괄호는 국번
세번째 괄호는 전화번호
를 의미하게 됩니다.


by 오라클초보 [2014.10.17 16:01:00]

답변 정말 감사드립니다..^^

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