需要一种简单的方法从列中提取电子邮件

时间:2014-11-11 16:54:52

标签: mysql sql

我正在使用MySQL In有一个名为chad的表,它有电子邮件

但是电子邮件是用逗号分隔的单行

示例

第1行

DOM @ uc.org,dorym @ uc.org,挖@ uc.org,哑弹@ uc.org,ebbj @ ucc.org,eeryk @ ucc.org,许@ uc.org,feyl @ ucc.org ,frht @ ucc.org,FYB @ uc.org,加西亚@ ucc.org,lesg @ ucc.org,edeb @ sobal.net,mllj @ uc.org

第2行

fdfdflor @ ucc.org,feyl @ uc.org,freht @ ucc.org,FYB @ uc.org,gafgfrc @ ucc.org,legfgfsg @ uc.org,edrtreb @ sal.net,mlgfglj @ uc.org

我已经使用sql清理和提取了大部分电子邮件,我使用的技术是每次创建一个新表,并通过从我之前创建的上一个表中删除第一封电子邮件来插入该表中的数据。 / p>

create table chad
select right(`Email`, Length(Email) - Length(substring_index(Email,',',1))-1)  Email from chac;

insert into ch(Email)
select distinct Email from chac where Email not like '%,%';

delete c.* from Chac c JOIN CH ON C.email = CH.Email;

insert into ch(Email)
select distinct substring_index(Email,',',1) Email from chac;

我使用的技术非常费力,有一种提取电子邮件的聪明方法。或者一些可以为我做的软件

1 个答案:

答案 0 :(得分:2)

你有很多东西。以下是提取它们的一种方法:

select substring_index(substring_index(email, ',', n.n), ',', -1)
from (select 1 as n union all select 2 union all select 3) n join
     chac c
     on (length(c.email) - length(replace(c.email, ',', '')) + 1) <= n.n;

然后,您可以使用insert intocreate table as将其插入另一个表格。

表达式:

length(c.email) - length(replace(c.email, ',', '')) + 1

通过计算逗号的数量并添加1来计算列表中的电子邮件数量。select中的表达式从列表中提取第n个元素。

您需要将n子查询扩展为特定列表所需的最大值。如果输入不好,可以将代码编写为Excel(或其他电子表格)中的公式,将其复制下来,然后将其插入查询工具中。