2012-03-11 48 views
1

排序问题的MySQL小时排序的MySQL小时AM PM VARCHAR

我有一个VARCHAR列分贝

开始

与像(小时),我有点用数据

20:15 - 21:30 - 00:15 

$query = 'SELECT * FROM `event` WHERE `location_id` = "' . $location['id'] . '" ORDER BY CAST(`start` AS SIGNED) ASC'; 

这让下面的输出

00:15 - 20:15 - 21:30 

问题是我需要的00:15最后

20:15 - 21:30 - 00:15 

有人吗?

回答

0
CAST(substr(start,1,(length(start-6))) AS SIGNED) 

了我的头顶 - 没有测试..

基本理念 - 剥离与子部分时间 - 然后做你的绝招。

+0

没了相同的结果 – ceasar 2012-03-11 12:37:58

0

您确定吗? 24小时制通常不会像那样工作。

简单的黑客将治疗小时0 24:

SELECT * FROM event 
WHERE location_id=? 
ORDER BY REPLACE(start, '00:', '24:') 

虽然这样做的任何方式,你会失去潜在的可转位。如果你需要建立索引,你必须创建另一列例如。整数分钟加60模1440

旁白:我强烈推荐参数化查询,以避免location_id潜在的SQL注入]

+0

这看起来像一个解决方案,但01:15等? – ceasar 2012-03-11 13:00:03

+0

找到解决方案 $ query ='SELECT * FROM'minicms_timetable_event' WHERE'location_id' =''。$ location ['id']。'“ORDER BY IF(LEFT('start',2)=”00“ ,1,0),'开始'ASC'; – ceasar 2012-03-11 13:27:38

+0

你想要什么命令'01:15'?这个问题没有说。 – bobince 2012-03-11 21:08:38

0

的解决方案是

$query = 'SELECT * FROM event WHERE location_id = "' . $location['id'] . '" ORDER BY IF(LEFT(start,2) = "00",1,0), start ASC';