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

SQL查询中ORDER BY按日期排序异常的修复方法求助

修复日期排序异常的方案

你的排序问题根源在于用字符串类型做日期排序:to_char(d.creation_date::date, 'dd/mm/yyyy')返回的是字符串,字符串比较是按字符顺序逐位判断,而非日期的逻辑顺序。比如'01/01/2023'和'31/12/2022',字符串比较时第一个字符'0' < '3',会被判定为前者更小,导致2022年的日期混在2023年结果里。

最优解决方案

直接使用原始日期类型字段排序,而非转换后的字符串:

SELECT DISTINCT d.id,
to_char(d.creation_date::date, 'dd/mm/yyyy') AS delivered_date
FROM delivery_kits_equipment_of_visit d
WHERE d.deleted IS NOT TRUE
AND d.deleted = 'FALSE'
ORDER BY d.creation_date::date DESC
LIMIT 10

备选方案(若需依赖SELECT中的列排序)

如果你的SQL环境要求ORDER BY必须引用SELECT列表中的列,可以新增原始日期列的别名,再按该别名排序:

SELECT DISTINCT d.id,
d.creation_date::date AS raw_delivered_date,
to_char(d.creation_date::date, 'dd/mm/yyyy') AS delivered_date
FROM delivery_kits_equipment_of_visit d
WHERE d.deleted IS NOT TRUE
AND d.deleted = 'FALSE'
ORDER BY raw_delivered_date DESC
LIMIT 10

两种方案都能保证按日期的逻辑顺序降序排列,同时保留你需要的dd/mm/yyyy格式输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:24:54