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

MySQL中如何实现varchar类型日期升序、时间降序的正确排序?

问题原因

你当前排序出错的核心原因是:Date字段为varchar类型,直接使用ORDER BY Date ASC是按字符串的字典顺序比较,而非按日期的实际时间先后排序。比如字符串01-Dec-2021首字符为0,字典序小于首字符为3的30-Nov-2021,就会出现12月1日排在11月30日之前的错误结果。

解决方案

需要先将varchar类型的Date字段也通过STR_TO_DATE函数转为日期类型后再排序,结合你给出的期望结果(最新日期排在最前,同日期下时间晚的排在前),调整后的查询语句如下:

SELECT * 
FROM `News_Data` 
ORDER BY STR_TO_DATE(`Date`, '%d-%b-%Y') DESC, STR_TO_DATE(`Time`, '%l:%i %p') DESC;

如果你的实际需求确实是日期按升序(更早的日期排在前面),仅需把日期排序的DESC改为ASC即可:

SELECT * 
FROM `News_Data` 
ORDER BY STR_TO_DATE(`Date`, '%d-%b-%Y') ASC, STR_TO_DATE(`Time`, '%l:%i %p') DESC;

格式说明

STR_TO_DATE中使用的格式符对应你日期字符串的规则:

  • %d:两位数字的日期
  • %b:缩写的月份名称(Nov/Dec等)
  • %Y:四位数字的年份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04