如何解决在SQL中即时生成具有分钟步长的时间间隔之间的时间序列
问题在这篇文章的结尾。
我发现此链接可以生成日期 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,m0)) is not null
and time(CONCAT(m3,m0)) >= @start_time
and time(CONCAT(m3,m0)) <= @stop_time
order by Time asc
这将生成此表:
Time
10:02
10:03
10:04
10:05
10:06
...
16:59
17:00
17:01
问题?
可以用更有效的方式写吗?我想指定一个带间隔的间隔,以便可以将其快速更新为每隔X分钟的间隔。我不想将结果存储在DB中,我只想即时生成它。因为我将其与其他表一起加入。
我在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 小提琴。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。