我需要通过SQL查询在大型用户电子邮件地址数据库中检测TLD。
电子邮件地址存储为一行中的字段。它的组织有点像:
id username email
1 steve steve@place.com
2 bill bill@fake.asdf
我正在尝试检测TLD是否与“com”或“org”或“net”不匹配,并且只返回数据库中与这些特定TLD不匹配的值。显然,在这种情况下,只会获取id为2的用户。
这必须在SQL查询中发生。
答案 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
字段并在该字段上添加索引