2015-04-06 159 views
-2

我有一个表格,其中每行都包含一个包含电子邮件地址字符串的列。我需要从地址字符串中提取每个地址。如何从电子邮件地址字符串中提取电子邮件地址

表例如:

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查询。

+0

你已经有了什么SQL? –

回答

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 [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;来获取值。

+0

感谢吨BK重新安排问题和答案,让我试试这个选项,并回来这个。 我们无法按照预期在单次尝试中获得解决方案,而不是在两个步骤中完成 – Shashi

+0

您无法在同一查询中执行更新和插入操作......您的问题是必须弹出(插入)值的原始字符串,然后将更改推送(更新)到原始字符串...可能有另一种算法,别人知道......但是,我有一个类似的问题与数百万的“链接”字符串,你有什么这是我如何解决它... – BK435

+0

谢谢BK的帮助 – Shashi

相关问题