从字段mysql中提取电子邮件ID

时间:2016-07-22 13:36:57

标签: mysql sql

我有一个列First_Name。但它有电子邮件ID的名称。例如。 ' bobbybob@gmail.com鲍比'有时像这样,' Bobby bobbybob@gmail.com'

我想从first_name列中获取电子邮件ID。

我试过这种方式:

select left(First_Name,locate(' ',First_Name)-1)
from mytable
where First_Name like '%gmail%' and Email_Personal="" 

但是这只适用于第一种情况,其中电子邮件ID是第一种,而第二种情况是名称是第一种,它取名字。我还希望在将其存储到另一列-Email_Personal后删除电子邮件ID。换句话说,我想从first_name获取电子邮件ID,并希望将其存储到email_personal中,并且只在first_name中保留名称。

我也尝试过这种方式:

select substring_index(first_name,' ',1) 
from mytable
where First_Name like '%gmail%' and Email_Personal1="" 

但这也仅适用于第一种情况。如果首先有名称,则只返回名称而不是电子邮件ID。

2 个答案:

答案 0 :(得分:1)

如果你总是有一个单词的名字,你可以这样做:

select (case when substring_index(first_name, ' ', 1) like '%@%'
             then substring_index(first_name, ' ', -1)
             else substring_index(first_name, ' ', 1)
         end) as RealFirstName

您可以使用类似的逻辑来提取电子邮件地址:

select (case when substring_index(first_name, ' ', 1) like '%@%'
             then substring_index(first_name, ' ', 1)
             else substring_index(first_name, ' ', -1)
         end) as EmailAddress

答案 1 :(得分:0)

或者你可以找到@并获得所有文字,直到两个方向的第一个空格:

select 
concat (
  reverse(substring_index(substring(reverse(First_Name), -- Bit before @
    instr(reverse(First_Name),'@')+1),' ',1)),
  substring_index(substring(First_Name,                  -- Bit after @
    instr(First_Name,'@')),' ',1) 
)
from mytable