如何在MySQL中查询并获取姓名的姓与名首字母缩写
MySQL 姓名缩写提取实现方法
假设你的people表存储姓名的字段为full_name,且姓名统一为「名 姓」用单个空格分隔的格式,可直接用以下查询实现需求:
SELECT CONCAT( LEFT(full_name, 1), '.', LEFT(SUBSTRING_INDEX(full_name, ' ', -1), 1), '.' ) AS name_abbreviation FROM people;
逻辑说明
LEFT(full_name, 1):提取完整姓名的第一个字符,即名的首字母SUBSTRING_INDEX(full_name, ' ', -1):按空格切割姓名字符串,取最后一段的完整姓氏内容LEFT(SUBSTRING_INDEX(full_name, ' ', -1), 1):提取姓氏的首字母CONCAT函数将两段首字母和英文句号拼接,得到要求的缩写格式
常见问题排查
如果之前执行语句返回完整姓名,通常是两个原因:
- 未做首字母拼接,直接返回了原
full_name字段 - 姓名存在多个连续空格、前后空格的情况,导致切割逻辑失效,可先做字段清洗再提取:
SELECT CONCAT( LEFT(clean_name, 1), '.', LEFT(SUBSTRING_INDEX(clean_name, ' ', -1), 1), '.' ) AS name_abbreviation FROM ( -- 先清洗姓名:去除前后空格,将多个连续空格替换为单个 SELECT REPLACE(TRIM(full_name), ' ', ' ') AS clean_name FROM people ) AS t;
含中间名的扩展场景
如果姓名包含中间名(如John Allen Dow要得到J.A.D),可结合递归CTE实现,大部分常规场景下上述两段式提取逻辑即可覆盖需求。
内容的提问来源于stack exchange,提问作者Odez
相关产品推荐
相关产品推荐

