SQL聚合查询如何按同列空格分隔的第二值升序、第一值升序排序
解决方法
核心逻辑是把Semester字段按空格拆分为前后两段,优先对第二段做升序排序,再对第一段做升序排序,不同数据库的字符串拆分函数略有区别,对应修改ORDER BY子句即可:
MySQL / MariaDB 版本
order by substring_index(pdc.semester, ' ', -1) asc, substring_index(pdc.semester, ' ', 1) asc
PostgreSQL 版本
order by split_part(pdc.semester, ' ', 2) asc, split_part(pdc.semester, ' ', 1) asc
SQL Server 2016+ 版本
order by parsename(replace(pdc.semester, ' ', '.'), 1) asc, parsename(replace(pdc.semester, ' ', '.'), 2) asc
Oracle 版本
order by substr(pdc.semester, instr(pdc.semester, ' ') + 1) asc, substr(pdc.semester, 1, instr(pdc.semester, ' ') - 1) asc
修改后就可以得到你需要的排序效果:先按空格后的年份/批次段升序,同一段内再按空格前的编号升序。
内容的提问来源于stack exchange,提问作者Ishfaq Babar
相关产品推荐
相关产品推荐

