개인정보 생년월일 마스킹 방법 문의드립니다. 0 4 604

by Yong [Oracle 기초] 생년월일 날짜 마스킹 BIRTHDAY [2019.01.31 17:12:03]


안녕하세요.

생년월일 마스킹 방법 질문드립니다.

생년월일은 sysdate로 들어있으며, 날짜 포맷은 각 국가에 설정된 포맷으로 yyyy/mm/dd 또는 mm/dd/yyyy 또는 dd/mm/yyyy로 넘어오며, 마스킹은 년월일 중, 년과 일의 반만 마스킹 하려합니다.

예를 들어 생일이 2019/01/31 이라면, 하기처럼 마스킹 하려 하는데 도저히 모르겠는데 방법이 있을까요? 답변 부탁드립니다.ㅜㅜ

1. 20**/01/3*

2. 01/3*/20**

3. 3*/01/20**

 

by 마농 [2019.01.31 17:21:48]

1. 생년월일의 자료형을 명확하게 알아야 합니다.
 - DATE 형인지?
 - VARCHAR2(10) 인지?
2. 국가별 포멧이
 - 어떤 의미이며?
 - 어떤 방식으로 관리되는지?


by Yong [2019.01.31 17:27:36]

안녕하세요.

1. 생년월일의 자료형은 DATE 형입니다.

2. 국가별 포맷은, 쉽게 말해 날짜 형식을 의미합니다.

   서비스 대상이 전국가이다 보니 국가별로 날짜를 보여주는 형식이 달라서 디비에 각 국가별로  yyyy/mm/dd 또는 mm/dd/yyyy 또는 dd/mm/yyyy가 들어있고, 그 설정을 읽어서 파라미터로 넘겨줍니다.

   하기의 날짜형식 DD/MM/YYYY가 달라진다고 보시면 됩니다.

    SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY')     =>    SELECT TO_CHAR(SYSDATE, ${dateFormat})
    FROM DUAL;


by 마농 [2019.01.31 17:48:42]
WITH t_master AS
(
SELECT TO_DATE('2019/01/31', 'yyyy/mm/dd') birthday FROM dual
)
, t_format AS
(
SELECT 'KR' na, 'YYYY/MM/DD' fm, '(..)../(..)/(.).' v1, '\1**/\2/\3*' v2 FROM dual
UNION ALL SELECT 'XX', 'MM/DD/YYYY', '(..)/(.)./(..)..', '\1/\2*/\3**' FROM dual
UNION ALL SELECT 'YY', 'DD/MM/YYYY', '(.)./(..)/(..)..', '\1*/\2/\3**' FROM dual
)
SELECT a.birthday
     , b.na
     , TO_CHAR(a.birthday, b.fm) birthday_fm
     , REGEXP_REPLACE(TO_CHAR(a.birthday, b.fm), b.v1, b.v2) birthday_mask
  FROM t_master a
     , t_format b
-- WHERE b.na = 'KR'
;

 


by Yong [2019.02.01 08:06:12]

와....너무 감사드립니다!!!!!

주신 방법은 봐도 잘 모르겠어서 이해되도록 공부해야겠어요!

다시 한 번 너무 감사드리며, 새해 복 많이 받으시고 명절 잘 보내세요~!

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