对ORDER BY查询应用循环移位


Apply a circular shift to an ORDER BY query?

我在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 a.m.)。

如何更改格式?

看起来是你想要基于7:00am - 6:59am的旋转。你可以根据时间是否在早上7点之前进行排序,强制排序到2点……如果7am或AFTER,预排序为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更新调整。函数HOUR()的作用是:返回日期/时间列的数值值。你有HOURS()。现在,函数的参数是保存日期/时间字段的列的名称。我没有你的表结构知道列名,所以我只是叫它"columnTime"。根据SQLFiddle示例,我将其更改为…

HOUR(hours) <——HOUR()函数,使用表

中的列"hours"

你在找这个吗?

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

 ORDER BY  MINUTE(columntime) , SECOND(columntime)

演示

编辑:

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