MySQL一天中每小时一行

MySQL一天中每小时一行,mysql,Mysql,我试图为一天中的每一小时获取一行,我打算将某些数据加入其中 到目前为止,我只找到了这个解决方案,但我很确定这是一种更简单的方法 SElECT addtime('2016-01-22 00:00:00', t0.i) myHour FROM ( SELECT '00:00:00' i UNION SELECT '01:00:00' UNION SELECT '02:00:00' UNION SELECT '03:00:00' UNION SELECT '04

我试图为一天中的每一小时获取一行,我打算将某些数据加入其中

到目前为止,我只找到了这个解决方案,但我很确定这是一种更简单的方法

SElECT addtime('2016-01-22 00:00:00', t0.i) myHour
FROM (
    SELECT '00:00:00' i
    UNION SELECT '01:00:00'
    UNION SELECT '02:00:00'
    UNION SELECT '03:00:00'
    UNION SELECT '04:00:00'
    UNION SELECT '05:00:00'
    UNION SELECT '06:00:00'
    UNION SELECT '07:00:00'
    UNION SELECT '08:00:00'
    UNION SELECT '09:00:00'
    UNION SELECT '10:00:00'
    UNION SELECT '11:00:00'
    UNION SELECT '12:00:00'
    UNION SELECT '13:00:00'
    UNION SELECT '14:00:00'
    UNION SELECT '15:00:00'
    UNION SELECT '16:00:00'
    UNION SELECT '17:00:00'
    UNION SELECT '18:00:00'
    UNION SELECT '19:00:00'
    UNION SELECT '20:00:00'
    UNION SELECT '21:00:00'
    UNION SELECT '22:00:00'
    UNION SELECT '23:00:00'
) t0

这只是一个小问题:

SELECT '2016-01-22 00:00:00' + INTERVAL (d0*10+d1) hour  AS mydate
FROM (
SELECT 0 AS d0 UNION SELECT 1 UNION SELECT 2
) AS t1
cross JOIN (
SELECT 0 AS d1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) AS t2
WHERE (d0*10+d1) < 24
order by d0,d1;

这是我不久前学到的一个技巧,唯一的缺点是你应该引用一个超过24行的表,这应该很容易,因为你无论如何都想在连接中使用它

select
   addtime('2016-01-22 00:00:00', concat( @ num: =@ num + 1, ':00:00')) date 
from
   table,
   (
      select
         @ num: =- 1
   )
   num limit 24

这是一个很好的解决方案。(或者您可以为这些值构建一个表并加入其中)感谢您提供了MariaDB代码段。很好用!这也可以用于为两个日期之间的每一天创建一行吗?如下所示:选择“2016-01-22 00:00:00”+间隔seq day作为mydate,从seq_0_到_9999,其中DATEDIFF('2016-02-22','2016-01-22')>=seq;
select
   addtime('2016-01-22 00:00:00', concat( @ num: =@ num + 1, ':00:00')) date 
from
   table,
   (
      select
         @ num: =- 1
   )
   num limit 24