我想隐藏/替换(用星号*
)pl / sql中字符串中的某些字符,例如,在某些忘记密码选项的网站中,它们显示电子邮件ID或电话号码,如:
p******bh****@y****.**.in
或
+91 9**** **160
我想显示由"_" or "." or "@"
分隔的每个单词的第一个和最后一个字符。
所有其他字符应显示为星号"*"
。
有关此问题的任何帮助吗?
答案 0 :(得分:0)
您可以根据自己的需要编写,编译和使用此功能,可能需要进行一些调整:
create or replace function stars(i_str in varchar2) return varchar2 is
type chars is table of char(1);
v_show chars := chars('@', ' ', '.', '+', '_');
v_output varchar2(100) := '';
begin
for i in 1 .. length(i_str) loop
if i = 1 or i = length(i_str)
or substr(i_str, i - 1, 1) member of v_show
or substr(i_str, i + 1, 1) member of v_show
or substr(i_str, i, 1) member of v_show
then
v_output := v_output || substr(i_str, i, 1);
else
v_output := v_output || '*';
end if;
end loop;
return v_output;
end;
测试:
with test as (
select 'pabcdefb_habch@yabcy.abc.in' as str from dual union all
select '+91 91238 51230' from dual union all
select 'PBhagat' from dual union all
select 'Stack Overflow' from dual)
select str, stars(str) as output from test
STR OUTPUT
--------------------------- ---------------------------
pabcdefb_habch@yabcy.abc.in p******b_h***h@y***y.a*c.in
+91 91238 51230 +91 9***8 5***0
PBhagat P*****t
Stack Overflow S***k O******w