如何从电子邮件地址字符串中提取电子邮件地址
问题描述:
我有一个表格,其中每行都包含一个包含电子邮件地址字符串的列。我需要从地址字符串中提取每个地址。如何从电子邮件地址字符串中提取电子邮件地址
表例如:
id | email_id |
123 | [email protected],[email protected];[email protected] |
abc | [email protected];[email protected];[email protected] |
900 | [email protected];[email protected];[email protected] |
这是从表中进行选择时预期的结果的一个例子:
id | email_id
123 | [email protected]
123 | [email protected]
123 | [email protected]
同样的结果应当发生对ABC和900行。
请帮助我解决上述问题的SQL查询。
答
我会在两个不同的步骤中做到这一点。
先拔出每一行的第一个电子邮件地址,将其插回用相同的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 [email protected];[email protected];[email protected]
900 [email protected];[email protected];[email protected]
abc [email protected];[email protected];[email protected]
123 [email protected]
900 [email protected]
abc [email protected]
然后取出电子邮件您刚刚从原始字符串中弹出的地址:
update tester.email_address set email_id = substr(email_id, locate(';', email_id) +1) where email_id like '%;%';
看起来就像这样:
id email_address
123 [email protected];[email protected]
900 [email protected];[email protected]
abc [email protected];[email protected]
123 [email protected]
900 [email protected]
abc [email protected]
做同样推动和弹出下一个电子邮件地址了,等等...
注意:您可能需要运行SET SQL_SAFE_UPDATES = 0;
运行更新。
然后你可以运行类似于: select * from email_address order by email_id asc;
来获取值。
你已经有了什么SQL? –