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

时间:2014-03-03 06:42:24

标签: sql oracle email

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

SELECT substr('name@address.com', 0, instr('name@address.com', '@')-1) 
FROM dual;

我可以从上述查询中的'@'之前的电子邮件地址中获取子字符串:

  

'名称'

但我需要针对不同长度的电子邮件地址进行此​​操作。

我需要这样的输出

  

xxme@address.com或naxx@address.com

请帮帮我,谢谢

3 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:0)

我想这就是你要找的东西:

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。

答案 2 :(得分:0)

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

它工作得很完美..