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如何屏蔽邮箱地址?的主要内容,如果未能解决你的问题,请参考以下文章

邮箱地址怎么写

如何判断一个邮箱地址是否教育邮箱?

google邮箱登陆问题,为啥在一个网络能上去,有的网络上不去?

邮箱地址怎么写

email地址格式怎么写 email地址格式如何写

如何找到微信的服务器地址