通过SQL查询检测电子邮件地址中的TLD

时间:2011-06-08 22:03:29

标签: mysql sql tld

我需要通过SQL查询在大型用户电子邮件地址数据库中检测TLD。

电子邮件地址存储为一行中的字段。它的组织有点像:

id     username     email

1      steve        steve@place.com
2      bill         bill@fake.asdf

我正在尝试检测TLD是否与“com”或“org”或“net”不匹配,并且只返回数据库中与这些特定TLD不匹配的值。显然,在这种情况下,只会获取id为2的用户。

这必须在SQL查询中发生。

3 个答案:

答案 0 :(得分:2)

使用REGEXP,

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

您可以编辑表达式以获得所需的结果。 :)

答案 1 :(得分: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

答案 2 :(得分:0)

SELECT id
FROM users
WHERE SUBSTRING_INDEX( email, '.', -1 )
        NOT IN ('com', 'net', 'org') 

但是你运行它(很容易使用LIKE),它不会很快。如果您想查询搜索电子邮件的TLD(表中有数千或数百万行)并且查询速度很快,您可以在表中添加tld字段并在该字段上添加索引