You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2014如何筛选仅含Gmail、Hotmail、Yahoo的邮箱记录?

解决多域名邮箱筛选与排序问题

首先咱们来拆解你遇到的问题:单独筛选Gmail能拿到数据,但同时加Hotmail、Yahoo就返回0条,大概率是条件匹配格式不对或者大小写不兼容导致的。下面给你具体的解决方案:

1. 正确的筛选+排序SQL语句

试试用这个写法,既能覆盖三类域名,又能按域名排序:

SELECT email
FROM your_table_name -- 替换成你的实际表名
WHERE 
    -- 统一转小写避免大小写不匹配,.%匹配所有域名后缀(比如.com/.co.uk)
    LOWER(email) LIKE '%@gmail.%'
    OR LOWER(email) LIKE '%@hotmail.%'
    OR LOWER(email) LIKE '%@yahoo.%'
ORDER BY 
    -- 按指定域名顺序排序:Gmail → Hotmail → Yahoo
    CASE 
        WHEN LOWER(email) LIKE '%@gmail.%' THEN 1
        WHEN LOWER(email) LIKE '%@hotmail.%' THEN 2
        WHEN LOWER(email) LIKE '%@yahoo.%' THEN 3
    END;

2. 为什么你的原写法失效?

  • 匹配范围太窄:如果你的原条件是email LIKE '%@GMAIL',但实际邮箱是xxx@gmail.com,这种写法只会匹配域名刚好是@GMAIL(不带后缀)的记录,自然找不到数据。加上.%就能覆盖所有以@gmail开头的域名后缀。
  • 大小写不兼容:部分数据库(比如PostgreSQL)默认区分大小写,如果你数据库里的邮箱是小写域名,而条件写的是大写@GMAIL,就会匹配失败。用LOWER(email)统一转小写后再匹配,就能解决这个问题。
  • 逻辑错误:如果不小心把OR写成了AND,那肯定返回0条记录(一个邮箱不可能同时属于三个域名),可以检查下原代码的逻辑运算符。

3. 可选优化:精准匹配完整域名

如果你明确知道要筛选的完整域名后缀(比如gmail.com、hotmail.com),也可以用更精准的写法:

SELECT email
FROM your_table_name
WHERE 
    LOWER(SUBSTRING_INDEX(email, '@', -1)) IN ('gmail.com', 'hotmail.com', 'yahoo.com')
ORDER BY SUBSTRING_INDEX(email, '@', -1);

这个写法适合不需要匹配子域名的场景,要是需要覆盖gmail.cn、hotmail.co.uk这类变体,还是第一种LIKE的写法更灵活。

内容的提问来源于stack exchange,提问作者user1777929

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:25:06