2016-07-22 67 views
0

我有一列First_Name。但它的名字和電子郵件ID一起。例如。 '[email protected] Bobby',有時候也是這樣,'Bobby [email protected]'從字段mysql中提取電子郵件ID

我想從first_name列中獲取電子郵件ID。

我試着這樣說:

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

但這部作品在電子郵件ID是第一,而在名稱是第一第二的情況下,它取的名字只有第一種情況。我也想刪除電子郵件ID後,將其存儲到另一列-Email_Personal。換句話說,我想從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

總是一個單詞的名字? –

+0

我發現記錄中只有一個單詞名稱和電子郵件ID。所以是的。 –

+0

也有這樣的記錄,例如。 '[email protected]'之間沒有空格也沒有名字。只是想刪除2012年。 –

回答

1

如果你總是有一個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 
+0

謝謝。在這三行中,我對1,1和-1有點困惑。是的,它的工作方式。那麼我怎樣才能從名字中刪除它? –

+0

好吧,我用更新查詢中的替換。非常感謝。但請清除我對1,1,-1值的疑惑,如果是select語句的一部分。 –

+0

如果有多個單詞,該怎麼辦?我還有另一列Residence_Address,其中也有一些電子郵件ID。很少有值由','(逗號)分隔。 –

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 
相關問題