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

修改按日期排序的SQL查询(日期字段为DD-MMM-YYYY格式的varchar类型)

问题根因

arr_date字段为varchar字符串类型,直接执行ORDER BY arr_date DESC时会按字符串字典序逐位比对,仅优先匹配开头的日数字,不会按照实际日期的时间先后逻辑排序,因此出现你描述的排序错乱问题。

解决方案

核心思路是先将arr_date字符串转换为日期类型,再基于日期类型排序即可得到正确结果,根据你使用的数据库类型选择对应语法即可:

适用MySQL(最常见的PHP适配数据库)

使用STR_TO_DATE函数做字符串转日期,匹配你的日期格式模板为%d-%b-%Y %H:%i:%s,可自定义空值的排序优先级:

// 空值排在最末尾的写法
$sqlC = "SELECT id, con_number, arr_date, arr_flag, reg FROM con WHERE arr_flag=0 AND reg='".$region."' ORDER BY IF(arr_date IS NULL OR arr_date = '', 1, 0), STR_TO_DATE(arr_date, '%d-%b-%Y %H:%i:%s') DESC";

注:直接拼接$region变量存在SQL注入风险,建议改为预处理语句传参更安全。

适用Oracle

使用TO_DATE函数转换:

ORDER BY TO_DATE(arr_date, 'DD-MON-YYYY HH24:MI:SS') DESC NULLS LAST

适用SQL Server

使用TRY_CONVERT函数转换:

ORDER BY TRY_CONVERT(DATETIME, arr_date, 106) DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:57:03