2013-06-12 56 views
0

我的表中有一個longtext列「description」,有時包含一個電子郵件地址。我需要提取此電子郵件地址並將其添加到每行的單獨列中。這可能在MySQL中做到嗎?從MySQL字段中提取電子郵件地址

+0

當然是的。請詳細解釋一下到目前爲止您嘗試的內容以及您的數據庫結構。 – lvarayut

+0

基本上,我有一個「描述」列和另一個名爲「電子郵件」的列,我需要在描述中查找電子郵件地址並添加到電子郵件列中。我想我會寫一個快速的Python腳本來做到這一點,但有興趣的話,如果有一種方法直接在數據庫中做到這一點。 –

回答

3

只能從使用純粹的Mysql的正則表達式匹配中選擇匹配的零件。 。你可以使用mysql擴展(如Return matching pattern陳述,或使用腳本語言(如PHP)

+0

謝謝! (我會upvote,但我還沒有代表) –

+0

當然可以,請不要張貼不正確的答案。 – hd1

+0

@ hd1我說的是匹配(只選擇匹配的部分)。你不能使用純粹的mysql來做到這一點。 – Yousf

0

如果你可以安裝lib_mysqludf_preg MySQL的UDF,那麼你可以做:

SET @regex = "/([a-z0-9!#\$%&'\*\+\/=\?\^_`\{\|\}~\-]+(?:\.[a-z0-9!#\$%&'\*\+\/=\?^_`{\|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|post|pro|tel|travel|xxx))/i"; 

SELECT 
    PREG_CAPTURE(@regex, description) 
FROM 
    example 
WHERE 
    PREG_CAPTURE(@regex, description) > ''; 

提取從description領域第一個電子郵件地址。

我想不出其他解決方案,爲REGEXP操作人員只需返回1或0,和正則表達式匹配的位置不位置。

1

我SQL 確實regular expressions,但正則表達式不是match email addresses的最佳方式。我強烈建議使用您的客戶端語言。

+0

當然你可以匹配一個正則表達式,但是你不能只選擇匹配的部分。 – Yousf

+0

這就是爲什麼我*強烈建議使用您的客戶端語言* – hd1

0

您可以使用子指標來捕捉電子郵件地址...

第一子指數捕獲到這些賬戶。
第二個substring_index捕獲主機名。如果多個atso(@)存儲在列中,則必須選擇相同的電子郵件地址。

select concat(substring_index(substring_index(description,'@',1),' ',-1) 
      , substring_index(substring_index(description, 
               substring_index(description,'@',1),-1), 
           ' ',1)) 
相關問題