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
相关产品推荐
相关产品推荐

