例如,我的表date
上有一个名为post
的列,我想在ascending
中对其进行排序。
在我的date
列中,我用 RCF112 格式填写,例如:Sun, 22 APR 2012 5:21:22
。
首先我从这个命令开始:
SELECT *
FROM post
ORDER BY date ASC
但结果似乎不正确,因为它是根据其字符串排序的,例如。 Sun, 15 APR 2012
将早于Wed,11 APR 2012
,因为“Sun”以'S'开头,字母前面为'W',因此“Sun,15 APR 2012”首先出现。
如何更正此命令?
答案 0 :(得分:2)
您需要将字符串解析为日期时间才能正确排序。
使用您的格式,您可以尝试这样的事情:
STR_TO_DATE('Sun, 22 APR 2012 5:21:22', '%a, %e %b %Y %h:%i:%S')
创建日期2012-04-22 05:21:22
。
因此,您的查询应如下所示:
SELECT *
FROM post
ORDER BY
STR_TO_DATE(date, '%a, %e %b %Y %h:%i:%S')
ASC
正如其他人可能已经建议的那样,您可以使用datetime
字段类型并在select(date_format
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format)中设置日期格式以满足您的要求。
答案 1 :(得分:0)
SELECT *
FROM post
ORDER BY STR_TO_DATE(datestr, '%a, %d %b %Y %T') ASC