2010-03-09 77 views
1

我對MySQL的REGEX支持的功能有點困惑,我還沒有找到一個關於如何將結果與REGEX within an sql statement分開的可靠示例。通過REGEX在MySQL中解析結果

例子:

我怎麼能拉離,看起來像一臺電子郵件的數據...

+-------------------------+ 
|Emails     | 
|-------------------------| 
|[email protected]| 
+-------------------------+ 

,並返回經過,看起來像一個SQL語句的東西...

+------------------------------+ 
|Username | Domain | TLD | 
|-----------|------------|-----| 
|some.email | yourdomain | com | 
+------------------------------+ 
+0

這是使用MySQL腳本嗎? – 2010-03-09 22:04:45

回答

8

MySQL沒有內置的功能來執行你所要求的功能。通過定義一些新的函數是可能的,但只要用你通過訪問數據庫的任何編程語言來做就可能更容易。

對於作爲電子郵件地址,這樣簡單的事情,雖然,你不應該需要在所有使用正則表達式,你可以使用SUBSTRING_INDEX() function,如:

SELECT 
    SUBSTRING_INDEX(email, '@', 1) AS Username, 
    SUBSTRING_INDEX(SUBSTR(email, LOCATE('@', email)), '.', 1) AS Domain, 
    SUBSTRING_INDEX(email, '.', -1) AS TLD 
FROM users; 

在的話,那就是:

  • 用戶名=第一個'@'前的所有內容
  • Domain =第一個'@'和第一個'。'之間的所有內容。
  • TLD =上次'。'後的所有內容。
+0

嗯,中間子字符串沒有返回任何東西... – 2010-03-09 22:21:46

+0

我的錯誤,「LOCATE()」的參數是向後的,我將編輯我的答案來修復它。 – 2010-03-09 22:30:28

+0

謝謝!我喜歡這樣,這是一個非常簡單的解決方案。 – 2010-03-10 14:57:15

0

您也可以嘗試,

select substring_index(email, '@', 1) username 
     ,substring_index(substring_index(email, '@', -1), '.',1) domain 
     ,substring_index(email, '.', -1) tld 
from 
(select '[email protected]' email) E 

僅使用SUBSTRING_INDEX。第一個substring_index在'@'的左邊,第三個(內部substring_index)在'@'的右邊,然後由第二個子字符串解析得到域,最後一個將所有東西拉到'。'的右邊。