我正在使用Oracle 11.g.我想创建一个虚拟列,以便我可以从电子邮件地址中找到电子邮件服务提供商。例如,我希望新列显示基于包含“john.smith@verizon.net”的eMailAddress列的“verizon.net”我想我需要一个正则表达式来查找eMailAddress中“@”之后的所有内容柱。我不认为11.g支持前瞻。我如何为此构造正则表达式? 谢谢你看这个。
Select regexp_substr(email_address, '@([[:alnum:]]+\.?){1,2}/?')
From mail_recipient
Where prim_key = 1;
生成虚拟列的实际代码如下:
Alter Table mail_recipient
Add (EMAIL_PROVIDER VARCHAR2(4000 BYTE)
Generated Always As
(regexp_substr(email_address, '@([[:alnum:]]+\.?){1,2}/?')) VIRTUAL);
答案 0 :(得分:1)
因此,在一些反馈迭代之后,这就解决了OP问题:
'@([[:alnum:]_-]+(\.[[:alnum:]_-]+){0,})'