我希望在一个字段中收到电子邮件形成的文本.我在下面尝试过sql但没有运气.见SqlFiddle.从regexp中删除^和$也不起作用.
WITH TEST_DATA AS (
SELECT 'foo@gmail.com' AS EMAIL FROM DUAL UNION ALL
SELECT 'mail foo@gmail.com' FROM DUAL UNION ALL
SELECT 'mail foo@gmail.com sent' FROM DUAL UNION ALL
SELECT 'foo@gmail.com sent count 23' FROM DUAL UNION ALL
SELECT 'mail already sent to foo@gmail.com and foo@hotmail.com' FROM DUAL UNION ALL
SELECT 'foo@gmail.com sent count 23' FROM DUAL
)SELECT REGEXP_SUBSTR(EMAIL,'^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$') MAIL
FROM TEST_DATA;
Run Code Online (Sandbox Code Playgroud)
此数据集的预期输出
foo@gmail.com
foo@gmail.com
foo@gmail.com
foo@gmail.com
foo@gmail.com, foo@hotmail.com
foo@gmail.com
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
如果要在单个列中提取多个邮件ID,可以使用REGEXP_REPLACE函数.
假设数据中的所有ID都是有效的,
REGEXP_REPLACE (EMAIL, '(\w+@\w+\.\w+ ?)|(.)', '\1')
Run Code Online (Sandbox Code Playgroud)
这将删除除了至少由空格分隔的邮件ID之外的所有其他文本.
然后,您可以删除任何尾随空格并添加逗号以分隔多个ID.
REPLACE (TRIM (REGEXP_REPLACE (EMAIL, '(\w+@\w+\.\w+ ?)|(.)', '\1')),
' ',
', ')
Run Code Online (Sandbox Code Playgroud)
例:
WITH TEST_DATA
AS (SELECT 'foo@gmail.com' AS EMAIL FROM DUAL
UNION ALL
SELECT 'mail foo@gmail.com' FROM DUAL
UNION ALL
SELECT 'mail foo@gmail.com sent to 123@zxc.com and qwe@rt.com' FROM DUAL
UNION ALL
SELECT 'foo@gmail.com sent count 23 and asd@qwert.edu' FROM DUAL
UNION ALL
SELECT 'mail already sent to foo@gmail.com and foo@hotmail.com' FROM DUAL
UNION ALL
SELECT 'foo@gmail.com sent count 23' FROM DUAL)
SELECT REPLACE (TRIM (REGEXP_REPLACE (EMAIL, '(\w+@\w+\.\w+ ?)|(.)', '\1')),
' ',
', ')
MAIL
FROM TEST_DATA;
MAIL
-----------------------------
foo@gmail.com
foo@gmail.com
foo@gmail.com, 123@zxc.com, qwe@rt.com
foo@gmail.com, asd@qwert.edu
foo@gmail.com, foo@hotmail.com
foo@gmail.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |