从MySQL字段中提取电子邮件地址
问题描述:
我的表中有一个longtext列“description”,有时包含一个电子邮件地址。我需要提取此电子邮件地址并将其添加到每行的单独列中。这可能在MySQL中做到吗?从MySQL字段中提取电子邮件地址
答
如果你可以安装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,和正则表达式匹配的位置不位置。
答
您可以使用子指标来捕捉电子邮件地址...
第一子指数捕获到这些账户。
第二个substring_index捕获主机名。如果多个atso(@)存储在列中,则必须选择相同的电子邮件地址。
select concat(substring_index(substring_index(description,'@',1),' ',-1)
, substring_index(substring_index(description,
substring_index(description,'@',1),-1),
' ',1))
当然是的。请详细解释一下到目前为止您尝试的内容以及您的数据库结构。 – lvarayut
基本上,我有一个“描述”列和另一个名为“电子邮件”的列,我需要在描述中查找电子邮件地址并添加到电子邮件列中。我想我会写一个快速的Python脚本来做到这一点,但有兴趣的话,如果有一种方法直接在数据库中做到这一点。 –