如何从电子邮件地址字符串中提取电子邮件地址

时间:2015-04-06 17:07:46

标签: mysql

我有一个表有一列,每行包含一个电子邮件地址字符串。我需要从地址字符串中提取每个地址。​​

表示例:

id  | email_id |

123 | 123@gmail.com,123_2@yahooo.com;123@facebook.com |

abc | abc@gmail.com;abc_123@gmail.com;abc@win.com |

900 | 900@gmail.com;900@tin.com;900@facebook.com |

这是从表中选择时预期结果的一个示例:

id   | email_id

123  | 123@gmail.com

123  | 123_2@yahooo.com

123  | 123@facebook.com

对于abc和900行,应该会出现相同的结果。

请帮我解决上述问题的SQL查询。

1 个答案:

答案 0 :(得分:0)

我会在两个不同的步骤中这样做。

首先拉出每行中的第一个电子邮件地址,然后将其插回到具有相同ID的表格中:

insert into email_address(id, email_id) select id, left(email_id, locate(';', email_id) -1) from email_address where email_id like '%;%';

将如下所示:

id   email_address

123 123@gmail.com;123_2@yahooo.com;123@facebook.com

900 900@gmail.com;900@tin.com;900@facebook.com

abc abc@gmail.com;abc_123@gmail.com;abc@win.com

123 123@gmail.com

900 900@gmail.com

abc abc@gmail.com

然后从原始字符串中删除刚刚弹出的电子邮件地址:

update tester.email_address set email_id = substr(email_id, locate(';', email_id) +1) where email_id like '%;%';

将如下所示:

id  email_address

123 123_2@yahooo.com;123@facebook.com

900 900@tin.com;900@facebook.com

abc abc_123@gmail.com;abc@win.com

123 123@gmail.com

900 900@gmail.com

abc abc@gmail.com

再次执行相同操作以推送和弹出下一个电子邮件地址,依此类推......

注意:您可能必须运行SET SQL_SAFE_UPDATES = 0;才能运行更新。

然后你可以运行类似的东西: select * from email_address order by email_id asc;以获取价值。