我这里有两个时间 开始时间,结束时间和间隔,我的输出应该类似于
输入:
我的输出应该如下
10:00 AM
10:10 AM
10:20 AM
....
5:50 PM
6:00 PM
使用postgres查询
答案 0 :(得分:4)
您可以使用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);