MySQL DATE_FORMAT没有以正确的顺序输出日期

时间:2014-08-01 13:42:53

标签: mysql sql date date-format

我正在尝试按日期升序排序日期和时间表,然后按升序开始时间,但是我的日期列表没有以正确的顺序显示。开始时间列表似乎确实有效。

订单应显示为18/08/2014然后19/08/2014然后2014年8月20日的所有条目然后.... 01/09/2014然后02/09/2014 ...等,2014年9月16日是最后一个条目。

注意:我已经将每个日期和开始时间存储为我的MySQL表中的VARCHAR,现在不能/不能改变它。每个日期都遵循dd / mm / yyyy(英国英语)格式。

任何人可以通过指出我错过的内容来帮助我吗?

表'日程表'的表格设置

date         VARCHAR(255)
start_time   VARCHAR(255)

MySQL查询

SELECT * FROM schedule WHERE username='".$_SESSION['username']."' ORDER BY DATE_FORMAT(date, '%d/%m/%Y') ASC, start_time ASC

表格输出

Date        Start time  End time
16/09/2014      
18/08/2014  10:00       16:00
21/08/2014  10:00       12:00
28/08/2014  10:00       12:00
10/09/2014  10:00       12:00
11/09/2014  10:00       12:00
12/09/2014  10:00       12:00
21/08/2014  13:00       15:00
28/08/2014  13:00       15:00
10/09/2014  13:00       15:00
11/09/2014  13:00       15:00
12/09/2014  13:00       15:00
01/09/2014  15:00       15:30
28/08/2014  15:00       15:30
21/08/2014  15:00       15:30
02/09/2014  15:00       15:30
03/09/2014  15:00       15:30
04/09/2014  15:00       15:30
05/09/2014  15:00       15:30
08/09/2014  15:00       15:30
09/09/2014  15:00       15:30
10/09/2014  15:00       15:30
11/09/2014  15:00       15:30
12/09/2014  15:00       15:30
15/09/2014  15:00       15:30
16/09/2014  15:00       15:30
21/08/2014  16:00   
10/09/2014  16:00   
11/09/2014  16:00   

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

首先,我重新考虑将任何日期或时间存储为字符串的想法......这导致了这种问题。

MySQL实际上将日期视为字符串,并添加日期功能..并以更合理的格式%Y-%m-%d存储它们,从而产生正确的排序。

如果您绝对无法更改数据库..请联系可以或运行您的查询的人:

  SELECT * 
    FROM schedule 
   WHERE username='".$_SESSION['username']."' 
ORDER BY STR_TO_DATE(date, '%d/%m/%Y') ASC, start_time ASC

DATE_FORMAT将日期转换为指定的字符串格式。在你的情况下,它隐含地将你的字符串转换为一个日期(因为它被传递到函数中),然后将其格式化为它的原始格式..因此你看到的顺序。

答案 1 :(得分:1)

函数date_format()格式化日期并输出字符串。你想要str_to_date()

ORDER BY STR_TO_DATE(date, '%d/%m/%Y')