ORDER BY日期仅使用天数和月数mysql进行排序

时间:2014-01-20 15:58:24

标签: php mysql sql

这是我的SQL查询:

SELECT uid, title, startTime, endTime, cover FROM event ORDER BY startTime DESC 

但这将按顺序带给我元素:

 12/30/2013      00:00
 12/25/2013      00:00
 01/10/2014      00:00

看起来它只使用几天和几个月进行排序。

你对此有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:5)

如果您确实将它们存储为字符串,STR_TO_DATE()应该能够解决此问题。

SELECT uid, title, startTime, endTime, cover 
FROM event 
ORDER BY STR_TO_DATE( startTime, '%m/%d/%Y' ) DESC

答案 1 :(得分:0)

您的日期存储为字符串或varchar,这意味着标准格式或DATETIME格式完全抛出窗口。

如果您将列重新格式化为DATETIME,则会得到类似

的行
2013-12-15 00:00:00
2013-12-30 00:00:00
2014-01-10 00:00:00

您可以看到最重要的单位是字符串顺序中的第一个,而最小的单位是字符串中的最后一个,因此允许简单排序。

使用@Lars建议让STR_TO_DATE()函数具有排序功能,您应该在创建结构newStartTime的新列(我们称之为DATETIME)之后运行以下查询:< / p>

UPDATE event SET newStartTime = STR_TO_DATE( startTime, '%m/%d/%Y %h:%i' );

然后,在您已经接管的应用程序中折旧后,最终会抛弃startTime您应该这样做,因为字符串转换为DATETIME是这非常耗时,并且当您接近大型结果集时会导致查询执行时间过长。