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

PostgreSQL如何实现先按全大写优先、再按字母顺序排序?

PostgreSQL 自定义大小写优先级排序实现

要实现你需要的三级优先级排序规则,可通过在ORDER BY子句中新增多个自定义排序维度实现,具体方案如下:

实现思路

三个排序维度按优先级从高到低排列:

  • 第一维度:判断字符串是否为全大写,全大写的记录优先级更高
  • 第二维度:判断首字母是否为大写,首字母大写的记录优先级高于全小写记录
  • 第三维度:统一转为小写后按字母顺序升序排列,保证同类型记录的字母排序正确

最终SQL语句

SELECT *
FROM users
ORDER BY
  -- 全大写优先排序
  (name = upper(name)) DESC,
  -- 首字母大写次之
  (left(name, 1) = upper(left(name, 1))) DESC,
  -- 最后按字母顺序排序
  lower(name) ASC;

排序效果

执行上述语句后,将直接得到你期望的理想排序结果:

AVA
JESSICA
Adam
James
John
adrian

扩展适配(可选)

如果你的场景中存在部分中间字符大写的记录(例如aDRian),希望大写字符数量越多优先级越高,可在第二、第三维度之间增加如下排序规则:

-- 大写字符数量多的优先
(length(name) - length(regexp_replace(name, '[A-Z]', '', 'g'))) DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:24:07