【问题标题】:Need a easy way to extract Emails from the columns需要一种从列中提取电子邮件的简单方法
【发布时间】:2014-11-11 16:54:51
【问题描述】:

我正在使用 MySQL 有一个名为 chad 的表,其中包含电子邮件

但电子邮件在单行中,以逗号分隔

例子

第 1 行

dom@uc.org,dorym@uc.org,dug@uc.org,dud@uc.org,ebbj@ucc.org,eeryk@ucc.org,flor@uc.org,feyl@ucc.org ,frht@ucc.org,fyb@uc.org,garc@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 清理和提取了大部分电子邮件,我使用的技术是每次都创建一个新表,并通过从之前创建的上一个表中删除第一封电子邮件来将数据插入该表中。

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;

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你有一长串的东西。这是提取它们的一种方法:

    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(或其他电子表格)中的公式,将它们复制下来,然后将它们插入到您的查询工具中。

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2021-12-23
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2011-06-10
      • 1970-01-01
      相关资源
      最近更新 更多