gpt4 book ai didi

sql - 使用 Postgres 查询将时间分成 block

转载 作者:行者123 更新时间:2023-11-29 12:35:01 24 4
gpt4 key购买 nike

这里我有两个时间start_time、end_time 和 interval,我的输出应该是这样的

输入:

  • 开始时间:上午 10:00
  • 结束时间:下午 6:00
  • 间隔:10分钟

我的输出应该如下所示

10:00 AM
10:10 AM
10:20 AM
....
5:50 PM
6:00 PM

使用 postgres 查询

最佳答案

您可以为此使用generate_series()。不幸的是,它不支持直接生成一系列 time 值。因此,您需要生成一系列要添加的“分钟数”。为此,您需要计算开始时间和结束时间之间的分钟数,并将其用于 generate_series()

select time '10:00' + interval '1' minute * gs.minutes 
from generate_series(0,
(extract(epoch from time '18:00' - time '10:00') / 60)::int,
10) as gs(minutes);

表达式 extract(epoch from time '18:00' - time '10:00')/60 计算开始时间和结束时间之间的分钟数,并将其作为上限传递要生成的值的限制(需要将其转换为整数以使 generate_series() 满意)。第三个参数 10 指定以 10 为增量生成数字。然后将其乘以 1 分钟长度的间隔并添加到起始值。

请注意,这样写的时间文字使用标准的 ISO 24 小时表示法,而不是 AM/PM 表示法。但如果需要,您可以使用 to_char() 格式化您的输出以获得它。但是你最好在你的应用程序中格式化它,而不是在 SQL 中。

在线示例:https://rextester.com/XUJ25540


另一种方法是使用生成时间戳的 generate_series() 版本并将结果转换为 time 值(丢弃日期部分):

select gs.ts::time
from generate_series(current_date + time '10:00',
current_date + time '18:00',
interval '10' minute) as gs(ts);

在线示例:https://rextester.com/YRNAW81361

关于sql - 使用 Postgres 查询将时间分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com