我需要下面提到的要求的结果。
SELECT substr('name@address.com', 0, instr('name@address.com', '@')-1)
FROM dual;
我可以从上述查询中的'@'之前的电子邮件地址中获取子字符串:
'名称'
但我需要针对不同长度的电子邮件地址进行此操作。
我需要这样的输出
xxme@address.com或naxx@address.com
请帮帮我,谢谢
答案 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;
它工作得很完美..