将循环移位应用于ORDER BY查询?

时间:2014-05-20 13:07:52

标签: php mysql

我有一个关于mysql的每周时间表,其中我使用内置的ORDER BY函数按时间对活动进行排序:ORDER BY time

实际结果

00:01
07:00
08:00
11:00
23:00

预期结果

07:00
08:00
11:00
23:00
00:01
01:00
04:00

等,直到07:00(例如,模数7 am.m。)。

如何更改格式?

2 个答案:

答案 0 :(得分:1)

看起来你想要的旋转时间是早上7点到早上6点59分。您可以根据时间是否早于早上7点进行订单,强制预先排序为2 ...如果早上7点或之后,预排序为1,则按自然时间排序...

order by
   case when hour( columnTime ) < 7 then 2 else 1 end,
   columntime

这样,如果您的时间样本是

00:01a
02:27a
05:42a
06:59a
07:00a
10:29a
02:27p
11:59p

预测将导致......

PRESORT  Time
1        07:00a
1        10:29a
1        02:27p
1        11:59p
2        00:01a
2        02:27a
2        05:42a
2        06:59a

通过SQLFiddle adjusted更新。函数HOUR()返回日期/时间列的数字。你有HOURS()。现在,函数的参数是包含日期/时间字段的列的名称。我没有你的表结构来知道列名,所以我只称它为“columnTime”。根据您的SQLFiddle示例,我将其更改为...

HOUR(小时)&lt; - HOUR()函数,使用表格中的“小时”列

答案 1 :(得分:0)

你可能正在寻找这个吗?

  ORDER BY str_to_date(columntime,'%H:%i')

或者

 ORDER BY  MINUTE(columntime) , SECOND(columntime)

DEMO HERE

编辑:

SELECT * 
FROM tableName
ORDER BY CASE WHEN HOUR(date_time) BETWEEN 7 AND  12
   THEN 2
    else 1
end desc ,date_time asc

DEMO