oracle如何屏蔽邮箱地址?
Posted
技术标签:
【中文标题】oracle如何屏蔽邮箱地址?【英文标题】:How to mask email address in oracle? 【发布时间】:2014-03-03 06:42:23 【问题描述】:我需要下面提到的要求的结果。
SELECT substr('name@address.com', 0, instr('name@address.com', '@')-1)
FROM dual;
我可以从上述查询中的“@”之前的电子邮件地址中获取子字符串:
'名字'
但我需要为长度可能不同的不同电子邮件地址进行此设置。
我需要这样的输出
xxme@address.com 或 naxx@address.com
请帮帮我,谢谢
【问题讨论】:
给出一些示例输入和输出作为示例。因为您的查询在@符号之前的任何长度都可以正常工作 你想用什么算法来屏蔽数据?您想用 x 替换前 2 个字符吗?最后2个字符?名字的前半部分?名字的后半部分?如果你想做一些基于一半的事情,如果长度不均匀怎么办?如果@之前只有1个字符怎么办? 为什么要在 Oracle 中这样做? SQL 数据库是一个数据持久性系统。使用通用编程在客户端界面或 UI 级别执行此操作。您正在为自己或下一个要修复的程序员制造混乱或系统!您可能会发现这个问题已经回答了除 SQL 以外的大多数常见语言 为什么不直接使用SELECT 'xxxx' || substr('name@address.com', (instr('name@address.com', '@') -2)) FROM dual;
之类的东西呢?为什么需要显示屏蔽电子邮件的长度?
【参考方案1】:
使用正则表达式,您可以这样做:
with w as
(
SELECT 'name@address.com' mail from dual
union all
SELECT 'xxme@address.com' mail from dual
union all
SELECT 'naxx@address.com' mail from dual
)
select regexp_replace(w.mail, '(\w+)@.*', '\1') replaced
from w;
我的匹配并不完美,但这是一个好的开始!
【讨论】:
【参考方案2】:SELECT REPLACE('name@address.com',substr('name@address.com', instr('name@address.com', '@')-2,2),'**')
FROM dual;
它运行良好..
【讨论】:
【参考方案3】:我想这就是你要找的东西:
WITH CTE AS
(
SELECT 'xyz@gmail.com' as addr from dual
union
select 'abcdef@yahoo.com' as addr from dual
)
select substr(addr,1,instr(addr,'@',1,1)-1) as name from cte;
这将返回 xyz 和 abcdef。
【讨论】:
以上是关于oracle如何屏蔽邮箱地址?的主要内容,如果未能解决你的问题,请参考以下文章