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

MySQL查询:筛选姓氏以字母'M'开头的姓名数据

解决MySQL筛选姓氏以'M'开头的姓名问题

首先看你的数据格式,names字段里的姓名都是姓氏在前,逗号后跟名字的结构(比如Watts, Odysseus D.),所以核心思路是先提取逗号前的姓氏部分,再判断它是否以'M'开头。

这里有几种可靠的实现方式:

方法1:使用SUBSTRING_INDEX + LIKE(最直观)

这是最常用的方案,完美适配你的数据结构:

SELECT names
FROM your_table -- 替换成你的实际表名
WHERE SUBSTRING_INDEX(names, ',', 1) LIKE 'M%';
  • SUBSTRING_INDEX(names, ',', 1):这个函数会从names字段里提取第一个逗号之前的所有内容,也就是我们需要的姓氏部分。
  • LIKE 'M%':精准匹配以大写'M'开头的字符串,筛选出符合要求的记录。

方法2:不区分大小写的筛选

如果你需要同时匹配小写'm'开头的姓氏(比如miller, John),可以把姓氏转成小写后再匹配:

SELECT names
FROM your_table
WHERE LOWER(SUBSTRING_INDEX(names, ',', 1)) LIKE 'm%';

或者用正则表达式实现不区分大小写的匹配:

SELECT names
FROM your_table
WHERE SUBSTRING_INDEX(names, ',', 1) REGEXP '^[Mm]';

处理边界情况(可选)

如果你的表中存在没有逗号的姓名记录(比如直接存储Mary Ann),可以加上额外判断兼容这种情况:

SELECT names
FROM your_table
WHERE 
    -- 有逗号的情况:提取姓氏判断
    (LOCATE(',', names) > 0 AND SUBSTRING_INDEX(names, ',', 1) LIKE 'M%')
    -- 无逗号的情况:假设整个字符串是姓名,直接判断首字母
    OR (LOCATE(',', names) = 0 AND names LIKE 'M%');

不过根据你给出的示例数据,这一步可能不需要,但提前考虑到异常情况总是更稳妥的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:02:28