2013-06-12 55 views
0

我的表中有一个longtext列“description”,有时包含一个电子邮件地址。我需要提取此电子邮件地址并将其添加到每行的单独列中。这可能在MySQL中做到吗?从MySQL字段中提取电子邮件地址

+0

当然是的。请详细解释一下到目前为止您尝试的内容以及您的数据库结构。 – lvarayut

+0

基本上,我有一个“描述”列和另一个名为“电子邮件”的列,我需要在描述中查找电子邮件地址并添加到电子邮件列中。我想我会写一个快速的Python脚本来做到这一点,但有兴趣的话,如果有一种方法直接在数据库中做到这一点。 –

回答

3

只能从使用纯粹的Mysql的正则表达式匹配中选择匹配的零件。 。你可以使用mysql扩展(如Return matching pattern陈述,或使用脚本语言(如PHP)

+0

谢谢! (我会upvote,但我还没有代表) –

+0

当然可以,请不要张贴不正确的答案。 – hd1

+0

@ hd1我说的是匹配(只选择匹配的部分)。你不能使用纯粹的mysql来做到这一点。 – Yousf

0

如果你可以安装lib_mysqludf_preg MySQL的UDF,那么你可以做:

SET @regex = "/([a-z0-9!#\$%&'\*\+\/=\?\^_`\{\|\}~\-]+(?:\.[a-z0-9!#\$%&'\*\+\/=\?^_`{\|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|post|pro|tel|travel|xxx))/i"; 

SELECT 
    PREG_CAPTURE(@regex, description) 
FROM 
    example 
WHERE 
    PREG_CAPTURE(@regex, description) > ''; 

提取从description领域第一个电子邮件地址。

我想不出其他解决方案,为REGEXP操作人员只需返回1或0,和正则表达式匹配的位置不位置。

1

我SQL 确实regular expressions,但正则表达式不是match email addresses的最佳方式。我强烈建议使用您的客户端语言。

+0

当然你可以匹配一个正则表达式,但是你不能只选择匹配的部分。 – Yousf

+0

这就是为什么我*强烈建议使用您的客户端语言* – hd1

0

您可以使用子指标来捕捉电子邮件地址...

第一子指数捕获到这些账户。
第二个substring_index捕获主机名。如果多个atso(@)存储在列中,则必须选择相同的电子邮件地址。

select concat(substring_index(substring_index(description,'@',1),' ',-1) 
      , substring_index(substring_index(description, 
               substring_index(description,'@',1),-1), 
           ' ',1)) 
相关问题