排序mysql小时AM PM varchar

时间:2012-03-11 12:26:31

标签: mysql sorting while-loop

排序问题mysql小时

我有一个带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

任何人?

3 个答案:

答案 0 :(得分:0)

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

脱离我的头顶 - 没有测试..

基本思想 - 用子串去除时间部分 - 然后做你的技巧。

答案 1 :(得分:0)

你确定这个要求吗? 24小时制通常不会像那样工作。

简单的黑客将小时0视为24:

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

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

[旁白:我强烈建议参数化查询以避免location_id中潜在的SQL注入。]

答案 2 :(得分:0)

解决方案是

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