Sql 如何在oracle中屏蔽电子邮件地址?

Sql 如何在oracle中屏蔽电子邮件地址?,sql,oracle,email,Sql,Oracle,Email,我需要下面提到的要求的结果 SELECT substr('name@address.com', 0, instr('name@address.com', '@')-1) FROM dual; 我可以从上述查询的“@”之前的电子邮件地址中获取子字符串: “姓名” 但我需要为不同的电子邮件地址,这可能会在长度上有所不同 我需要这样的输出 xxme@address.com或naxx@address.com 请在这方面帮助我,谢谢你使用正则表达式,你可以这样做: with w as ( SE

我需要下面提到的要求的结果

SELECT substr('name@address.com', 0, instr('name@address.com', '@')-1) 
FROM dual;
我可以从上述查询的“@”之前的电子邮件地址中获取子字符串:

“姓名”

但我需要为不同的电子邮件地址,这可能会在长度上有所不同

我需要这样的输出

xxme@address.com或naxx@address.com


请在这方面帮助我,谢谢你使用正则表达式,你可以这样做:

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;

我的匹配并不完美,但这是一个好的开始

我想这就是你想要的:

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

SELECT REPLACE('name@address.com',substr('name@address.com', instr('name@address.com', '@')-2,2),'**')  
  FROM dual;

它工作得很好。

请给出一些输入和输出示例。因为您的查询在@symbol之前的任何长度都可以正常工作,所以您希望使用什么算法来屏蔽数据?是否要将前2个字符替换为x?最后两个字符?名字的前半部分?名字的后半部分?如果你想做一些基于一半的事情,如果长度不均匀怎么办?如果@前面只有一个字符怎么办?为什么要在Oracle中这样做?SQL数据库是一个数据持久化系统。使用通用编程在客户端界面或UI级别执行此操作。您正在为自己或下一个要修复的程序员制造混乱或系统!您可能会发现这个问题已经在大多数常见语言中得到了解答,而不是在SQL中。为什么不干脆用
SELECT'xxxx'| substr('name@address.com”,(instr()name@address.com“,”@')-2)从对偶?为什么需要显示屏蔽电子邮件的长度?