如何在Mysql/Sql中按时间列对表进行排序?

如何在Mysql/Sql中按时间列对表进行排序?,mysql,sql,Mysql,Sql,Mysql 5 表名为schedule 出发时间数据类型=varchar(20) 查询 select * from schedules; 输出: +-------------+----------------+-----------+----------------+-------------+--------+-----------------+ | travel_date | departure_time | origin_id | destination_id | operator_id

Mysql 5

表名为schedule

出发时间数据类型=varchar(20)

查询

select * from schedules;
输出:

+-------------+----------------+-----------+----------------+-------------+--------+-----------------+
| travel_date | departure_time | origin_id | destination_id | operator_id | status | available_seats |
+-------------+----------------+-----------+----------------+-------------+--------+-----------------+
| 2014-06-09  | 02:30 PM       |       134 |            251 |           2 | Active |              44 |
| 2014-06-09  | 09:30 PM       |       134 |            251 |           2 | Active |              14 |
| 2014-06-09  | 10:00 PM       |       134 |            251 |           2 | Active |              24 |
| 2014-06-09  | 12:30 PM       |       134 |            251 |           2 | Active |              23 |
| 2014-06-09  | 11:15 PM       |       134 |            251 |           2 | Active |              27 |
| 2014-06-09  | 09:30 PM       |       134 |            251 |           4 | Active |              24 |
+-------------+----------------+-----------+----------------+-------------+--------+-----------------+



SELECT * FROM schedules 
WHERE (travel_date ='2014-06-09' and origin_id ='134' 
and destination_id ='251' and operator_id not in (SELECT id FROM operators WHERE (status != 'Active')) and status ='Active' and available_seats > 0) 
ORDER BY departure_time ASC;
输出:

+-------------+----------------+-----------+----------------+-------------+--------+-----------------+
| travel_date | departure_time | origin_id | destination_id | operator_id | status | available_seats |
+-------------+----------------+-----------+----------------+-------------+--------+-----------------+
| 2014-06-09  | 02:30 PM       |       134 |            251 |           2 | Active |              44 |
| 2014-06-09  | 09:30 PM       |       134 |            251 |           2 | Active |              14 |
| 2014-06-09  | 09:30 PM       |       134 |            251 |           4 | Active |              24 |
| 2014-06-09  | 10:00 PM       |       134 |            251 |           2 | Active |              24 |
| 2014-06-09  | 11:15 PM       |       134 |            251 |           2 | Active |              27 |
| 2014-06-09  | 12:30 PM       |       134 |            251 |           2 | Active |              23 |
+-------------+----------------+-----------+----------------+-------------+--------+-----------------+
这里是如何按出发时间asc订购此表的


例如:出发时间应该是这样的:-12:30 PM,02:30 PM,09:30 PM,09:30 PM,10:00 PM,11:15 PM

它的类型是
varchar(20)
,所以它将被排序为简单的字符串。

通过这样的语句更改您的订单会有所帮助

  ORDER BY STR_TO_DATE(timeField,'%h.%i%p');
数据类型TIME用于存储时间数据类型-这意味着没有AM/PM。将数据以24小时格式存储在数据库中,并使用PHP或MySQL中的am/pm将其格式化为12小时格式,方法如下:

PHP:

或:


从表中选择日期格式('%h:%i:%s%p',时间)

因此,我需要做什么才能使其可排序。@user3676578您可以将
出发时间
转换为
时间
列检查Sylvain Leroux Answer出发时间应该是这样的:-下午2:30,晚上9:30,晚上10:00,下午12:30,晚上11:15。错误..应该是:-下午12:30,下午2:30,晚上9:30,晚上10:00,晚上11:15。对..在这种情况下,您需要将design.ORDER按STR_更改为_DATE(时间字段,“%h:%i%p”);是吗?Piyush我正在研究Ruby on Rails 4。我认为在mysql中,它工作得很好。一旦检查此链接
$date = new DateTime($mysql_column['time']);
$date->format('h:i:s a');
$date = date('h:i:s a', strtotime($mysql_column['time']));
or MySQL: