MYSQL按日期订购DATE_FORMAT

时间:2014-02-11 21:21:19

标签: mysql sql

我有一个DATE类型的列(startdate)。

我正在使用DATE_FORMAT从查询中获得“月XX,XXXX”结果。

但是,当我按日期排序时按字母顺序排序...如何按时间顺序排列日期?

当我在ORDER BY中调用它时,我可以以不同方式格式化startdate列,以便按时间顺序排序吗?

这是查询...

SELECT location, course, DATE_FORMAT( startdate, '%M %D, %Y' ) AS startdate 
    FROM `courses` c 
    LEFT JOIN `locdate` l ON c.id = l.id 
    ORDER BY startdate ASC 
    LIMIT 0, 10

3 个答案:

答案 0 :(得分:1)

您可以使用别名执行此操作。我必须猜测列的来源,但这是一次尝试:

SELECT l.location, c.course, DATE_FORMAT(l.startdate, '%M %D, %Y' ) AS startdate 
FROM `courses` c 
LEFT JOIN `locdate` l ON c.id = l.id 
ORDER BY l.startdate ASC 
LIMIT 0, 10;

通过使用表别名,它知道使用表列中的版本。

答案 1 :(得分:0)

不要按格式化的字符串版本排序。它不是允许这种排序的格式,因为它不是最重要的组件 - 首先排序。按ACTUAL日期字段排序,该字段自然按正确顺序排序。

如果您的日期是yyyy mm dd格式,那么它自然会按字符串排序。

SELECT ...   DATE_FORMAT(...) AS formatted    ... ORDER BY `startdate` ASC
                                 ^^^^^^^^--different alias   ^^^^^^---actual field

答案 2 :(得分:0)

我刚刚遇到过这个问题,但这是我的解决方案。 拥有正常的格式化日期,然后添加一个额外的列

$query = "SELECT `StartDate` as datesort,DATE_FORMAT(`StartDate`,'%d %M %Y') as Date, FROM `courses`";

我正在使用StartDate并将其别名化为dateort。然后我使用datesort进行排序。这样我可以保持StartDate格式化,并使用dateort进行排序。

这是一个烦人的问题,但我的方法对它进行排序(忽略双关语)。