在 SQL 中以分钟为单位动态生成时间间隔之间的时间序列

Generate time serie between time interval with steps of minutes on the fly in SQL

问题在本post的最后。

我找到这个 link 来生成日期 Generating a series of dates 并修改它以在间隔中生成时间:

SET @start_time = "08:02";
SET @stop_time  = "17:02";
SELECT
     TIME_FORMAT(time(CONCAT(m3, m2, ':', m1, m0)) , "%H:%i") as Time
FROM
    (SELECT 0 m0 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 m0,
    (SELECT 0 m1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) AS m1,
    (SELECT 0 m2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS m2,
    (SELECT 0 m3 UNION SELECT 1 UNION SELECT 2) AS m3
where time(CONCAT(m3, m2, ':', m1, m0)) is not null 
and time(CONCAT(m3, m2, ':', m1, m0)) >= @start_time
and time(CONCAT(m3, m2, ':', m1, m0)) <= @stop_time
order by Time asc

这将生成此 table:

Time
10:02
10:03
10:04
10:05
10:06
...
16:59
17:00
17:01

问题?

这可以用更有效的方式写吗?我想用步骤指定一个间隔,所以可以快速将它更新为每 X 分钟间隔。我不想将结果存储在数据库中,我只想即时生成它。因为我会和其他 table 一起加入。

我在 mysql 查询中经常使用它来为易于在 Excel 中绘制的测量值制作时间序列。

为此目的,我是递归 CTE 的粉丝:

with recursive times as (
      select time('10:00:00') as time
      union all
      select time + interval 17 minute
      from times
      where time < time('17:00:00')
     )
select *
from times;

Here 是一个 db<>fiddle.