정규식으로 주민등록번호와 휴대폰 번호의 마스킹해보자.
주민등록번호의 뒷 6자리를 마스킹한다. 22행을 보면 월말일자 처리가 완벽하지 않다. 완전한 월말일자 처리를 위해서는 좀 더 정교한 정규식이 필요하다.
WITH t1 AS (SELECT CASE LEVEL WHEN 1 THEN '7908221123456' WHEN 2 THEN '7913221123456' WHEN 3 THEN '7908321123456' WHEN 4 THEN '7908225123456' WHEN 5 THEN '7902311123456' WHEN 6 THEN '790822-1123456' END AS c1 FROM DUAL CONNECT BY LEVEL <= 6) SELECT REGEXP_REPLACE (REGEXP_REPLACE (a.c1, '[^0-9]'), '^([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])([1-4])([0-9]{6})$', '\1\2\3\4******') AS c1 FROM t1 a; C1 ------------- 7908221****** 7913221123456 7908321123456 7908225123456 7902311****** 7908221****** 6 행이 선택되었습니다.
아래 쿼리는 휴대폰 번호 가운데 3자리 또는 4자리를 마스킹한다. 20행의 012는 정제 대상이다.
WITH t1 AS (SELECT CASE LEVEL WHEN 1 THEN '01012345678' WHEN 2 THEN '0101235678' WHEN 3 THEN '010125678' WHEN 4 THEN '01212345678' WHEN 5 THEN '010-1234-5678' END AS c1 FROM DUAL CONNECT BY LEVEL <= 5) SELECT REGEXP_REPLACE (REGEXP_REPLACE (a.c1, '[^0-9]'), '^(010|011|016|017|019)([0-9]{3,4})([0-9]{4})$', '\1****\3') AS c1 FROM t1 a; C1 ----------- 010****5678 010****5678 010125678 01212345678 010****5678 5 행이 선택되었습니다.
'Oracle > SQL' 카테고리의 다른 글
데이터 계산 순서 구하기 (0) | 2012.05.11 |
---|---|
주별 집계 (0) | 2012.05.09 |
다중 행을 문자열로 집계 (0) | 2012.04.16 |
구분자 포함 값을 행으로 분리 (0) | 2012.04.13 |
연속된 공백을 하나의 공백으로 변경 (0) | 2012.04.12 |