2015-04-02 49 views
1

我正面临按AM/PM排序的问题。在SQL中排序时间(AM/PM)?

这里是我的表数据

login_time 
1:30 PM 
11:00 AM 
10:00 AM 
12:30 PM 
10:00 PM 
11:10 AM 
12:20 PM 
3:40 PM 
2:20 PM 

我想为导致:

10:00 AM 
11:00 AM 
11:10 AM 
12:20 PM 
12:30 PM 
1:30 PM 
2:20 PM 
3:30 PM 
+0

我希望你将时间存储为TIME,DATETIME或TIMESTAMP,而不是VARCHAR或TEXT。 – cpburnz 2015-04-02 17:34:11

回答

1

好了,你还没有告诉我们你的SELECT查询,所以我走乱撞,但我会想你也许有这样的事情:

SELECT login_time 
FROM my_table 

,你需要有这样的:

SELECT login_time 
FROM my_table 
ORDER BY login_time 

也就是说,假设login_time的类型是time

0

您没有使用正确的数据类型保存日期时间数据,这会产生像现在一样的问题。您的数据保存为varchar,它们不适合日期或时间。

但是在您的情况下,您可以尝试如下,即首先将其转换为实时,然后获取秒,然后再按顺序。

select * from table_name 
order by time_to_sec(str_to_date(login_time,'%h:%i %p')) 

没有time_to_sec函数也应该工作。

order by str_to_date(login_time,'%h:%i %p') 
1

如果login_time存储为一个时间,你可以做:

order by login_time 

如果login_time存储为一个字符串,你可以这样做:

order by str_to_date(login_time, '%h:%i %p')