2011-06-08 78 views
1

我需要通過SQL查詢在用戶電子郵件地址的大型數據庫上檢測TLD。通過SQL查詢在電子郵件地址中檢測TLD

電子郵件地址作爲一個字段存儲在一行中。它的組織kindof像:

id  username  email 

1  steve  [email protected] 
2  bill   [email protected] 

我想檢測,如果TLD不匹配「COM」或「組織」或「網」,只有從這些不匹配數據庫返回的值特定的頂級域名。很明顯,在這種情況下,只有id 2的用戶纔會被提取。

這必須發生在SQL查詢中。

+0

用戶表有多大? – 2011-06-08 22:25:38

+0

哪個RDBMS? (MySQL,Oracle,SQL-Server,...) – 2011-06-08 22:26:43

+0

@ypercube成千上萬的成員和mysql。 – Cyclone 2011-06-08 22:59:53

回答

2

使用REGEXP,

SELECT fields FROM table WHERE email REGEXP '^(net|org|com)$'; 

您可以編輯表達式,以獲得期望的結果。 :)

+0

它看起來像你可能想要刪除那個「^」 – thomasrutter 2016-04-20 05:41:08

2

那麼,可能有更好的方法在您的特定系統中執行此操作,但這不會使用任何特定於DB的功能。另外,如果您決定在某個時候從表中讀取排除列表而不是對其進行硬編碼,則可以對其進行修改。

select users.* 
from users 
left join (
    select 'com' as tld 
    union all select 'net' 
    union all select 'org' 
) tlds on users.email like '%.' || tld 
where tlds.tld is null 
0
SELECT id 
FROM users 
WHERE SUBSTRING_INDEX(email, '.', -1) 
     NOT IN ('com', 'net', 'org') 

但是你運行這個(很容易使用LIKE代替),它不會要快。如果您想要查詢電子郵件的TLD(表中有成千上萬或上百萬行)並且查詢速度很快,則可以在表中添加一個tld字段,並在該字段中添加一個索引。

相關問題