MySQL查询咨询:不新增列调整单列内姓名顺序以实现按名字排序
没问题!针对你这种在同一列存储「姓氏, 名字」、又不能新增列的情况,我们可以直接用数据库自带的字符串处理函数转换格式,同时还能基于转换后的名字来排序。下面分几种主流数据库给出具体实现方案:
MySQL/MariaDB 方案
利用SUBSTRING_INDEX函数按逗号分隔符截取内容,再拼接成目标格式:
SELECT id, CONCAT( SUBSTRING_INDEX(owner, ', ', -1), -- 提取逗号后的名字部分 ' ', SUBSTRING_INDEX(owner, ', ', 1) -- 提取逗号前的姓氏部分 ) AS owner, animal FROM your_table_name -- 替换成你的实际表名 ORDER BY SUBSTRING_INDEX(owner, ', ', -1) ASC; -- 按名字升序排序
PostgreSQL 方案
用SPLIT_PART函数拆分字符串,再拼接:
SELECT id, CONCAT( SPLIT_PART(owner, ', ', 2), -- 取拆分后的第2部分(名字) ' ', SPLIT_PART(owner, ', ', 1) -- 取拆分后的第1部分(姓氏) ) AS owner, animal FROM your_table_name ORDER BY SPLIT_PART(owner, ', ', 2) ASC;
SQL Server 方案
通过CHARINDEX定位逗号位置,结合SUBSTRING截取内容:
SELECT id, CONCAT( LTRIM(SUBSTRING(owner, CHARINDEX(',', owner) + 1, LEN(owner))), -- 提取名字并去掉前置空格 ' ', SUBSTRING(owner, 1, CHARINDEX(',', owner) - 1) -- 提取姓氏 ) AS owner, animal FROM your_table_name ORDER BY LTRIM(SUBSTRING(owner, CHARINDEX(',', owner) + 1, LEN(owner))) ASC;
小提示
如果你的数据里「姓氏, 名字」的分隔格式不统一(比如有的逗号后没有空格),可以先统一格式,比如在拆分前用REPLACE(owner, ',', ', ')把所有逗号替换成「逗号+空格」的形式,避免截取错误。
内容的提问来源于stack exchange,提问作者n00biew0lf
相关产品推荐
相关产品推荐

