我有一个列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。
答案 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