我有一个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
答案 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进行排序。
这是一个烦人的问题,但我的方法对它进行排序(忽略双关语)。