Sql 使用Postgres查询将时间划分为块
这里我有两个时间 开始时间、结束时间和间隔,我的输出应该是 输入:Sql 使用Postgres查询将时间划分为块,sql,postgresql,Sql,Postgresql,这里我有两个时间 开始时间、结束时间和间隔,我的输出应该是 输入: 开始时间:上午10:00 完整时间:下午六时 间隔时间:10分钟 我的输出应该如下 10:00 AM 10:10 AM 10:20 AM .... 5:50 PM 6:00 PM 使用postgres查询您可以使用generate_series()进行查询。不幸的是,它不支持直接生成一系列时间值。因此,您需要生成一系列要添加的“分钟数”。为此,您需要计算开始和结束时间之间的分钟数,并将其用于generate_series(
- 开始时间:上午10:00
- 完整时间:下午六时
- 间隔时间:10分钟
10:00 AM
10:10 AM
10:20 AM
....
5:50 PM
6:00 PM
使用postgres查询您可以使用
generate_series()
进行查询。不幸的是,它不支持直接生成一系列时间值。因此,您需要生成一系列要添加的“分钟数”。为此,您需要计算开始和结束时间之间的分钟数,并将其用于generate_series()
表达式extract(epoch from time'18:00'-time'10:00')/60
计算开始时间和结束时间之间的分钟数,并将其作为要生成的值的上限传递(需要将其转换为整数才能使generate_series()满意)。第三个参数10
指定以10为增量生成数字。然后将其乘以1分钟长度的间隔,并添加到起始值
请注意,这样编写的时间文字使用标准ISO 24小时表示法,而不是AM/PM表示法。但是,如果需要,可以使用to_char()
格式化输出。但您应该在应用程序中更好地格式化它,而不是在SQL中
在线示例:
另一种方法是使用生成时间戳的generate_series()
版本,并将结果转换为time
值(丢弃日期部分):
在线示例:您可以使用generate_series()
进行此操作。不幸的是,它不支持直接生成一系列时间值。因此,您需要生成一系列要添加的“分钟数”。为此,您需要计算开始和结束时间之间的分钟数,并将其用于generate_series()
表达式extract(epoch from time'18:00'-time'10:00')/60
计算开始时间和结束时间之间的分钟数,并将其作为要生成的值的上限传递(需要将其转换为整数才能使generate_series()满意)。第三个参数10
指定以10为增量生成数字。然后将其乘以1分钟长度的间隔,并添加到起始值
请注意,这样编写的时间文字使用标准ISO 24小时表示法,而不是AM/PM表示法。但是,如果需要,可以使用to_char()
格式化输出。但您应该在应用程序中更好地格式化它,而不是在SQL中
在线示例:
另一种方法是使用生成时间戳的generate_series()
版本,并将结果转换为time
值(丢弃日期部分):
在线示例:@Zack,是的,这是真的-但我假设使用时间戳,然后丢弃其中的日期部分,对于从未使用过generate_series()
@Zack,是的,这是真的-但我假设使用时间戳,然后丢弃其中的日期部分,对于从未使用过generate\u 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);
select gs.ts::time
from generate_series(current_date + time '10:00',
current_date + time '18:00',
interval '10' minute) as gs(ts);