Bittu14 Ответов: 0

Как замаскировать идентификатор электронной почты, не маскируя его доменное имя и точки в oracle SQL?


У меня есть несколько идентификаторов электронной почты в таблице. но мне нужно замаскировать все идентификаторы электронной почты с помощью oracle SQL. Ниже приведены некоторые примеры маскировки идентификаторов электронной почты,

Ввод : Выход :

1. alex.hales@gmail.com = ****.Хейлз@*****.ком
2. Joeroot.eng@yahoo.co.in = * * * * * ot. eng@*****.**.в

Я хочу:

Первая Часть:

Для каждого идентификатора электронной почты первые 5 чартеров с левой стороны " @ "должны быть замаскированы *, но если". " входит в первый символ, то он не должен быть замаскирован, он останется прежним.

вторая часть:

правая сторона от " @ "будет замаскирована*, опять же, если там есть".", то он останется прежним, и доменное имя, такое как .com, .in, должно быть таким, как оно есть.



Заранее спасибо.

Что я уже пробовал:

Declare
v_id Varchar2(100):= 'abc.defghijklmnop@qrst.uv.wxyz';
v_id1 Varchar2(100);
v_id2 Varchar2(100);
v_id3 Varchar2(100);
v_id4 Varchar2(100);
v_id5 Varchar2(100);
v_id6 Varchar2(100);
 
Begin
Select v_id,
instr(v_id,'.'),
instr(v_id,'@'),
Case When instr(v_id,'.') >=6
   Then '*****'|| substr(v_id,6,(instr(v_id,'@')-5))
Else
rpad(lpad('.',instr(v_id,'.'),'*'),6,'*') || substr(v_id,7,(instr(v_id,'@')- 6))
End testing
Into v_id1,v_id2,v_id3,v_id4
From dual;
 
dbms_output.put_line(v_id1);
dbms_output.put_line(v_id2);
dbms_output.put_line(v_id3);
dbms_output.put_line(v_id4);
End;
 
o/p:::
abc.defghijklmnop@qrst.uv.wxyz. 
4
18
***.**fghijklmnop@

SELECT REGEXP_REPLACE (substr(instr('abc.defghijklmnop@qrstname.uv.wxyz','@')+1),'^[.].'*')
FROM dual;

Output:
abc.defghijklmnop@****.**.****


Я не могу разоблачить доменное имя, а также не могу сделать все это вместе. Не мог бы кто-нибудь мне помочь?

0 Ответов