postgresql - Postgres在时间戳之间选择范围
问题描述
有两个时间戳,并导致它们之间的分钟让我们说 320 分钟我需要计算完整的小时,假设我们这里有 5 小时和 20 分钟,我需要插入 6 行和分钟列(5 行,60 作为分钟列和最后一个20分钟)
在 Postgres、一些循环或尝试使用 cte 选择数字时,最好的方法是什么?
解决方案
WITH timestamps AS (
SELECT '2019-01-07 03:30:00'::timestamp as ts1, '2019-01-07 08:50:00'::timestamp as ts2
)
SELECT 60 as minutes
FROM timestamps, generate_series(1, date_part('hour', ts2 - ts1)::int)
UNION ALL
SELECT date_part('minute', ts2 - ts1)::int
FROM timestamps
date_part
从时间戳差异中提取hour
(或minute
)值。- 使用该
generate_series
函数,我正在生成n
具有值60
(n = hours
)的行 - 添加剩余的分钟数
UNION ALL
编辑:超过 1 天:
而不是date_part
使用EXTRACT(EPOCH FROM ...)
它给你几秒钟的差异。
WITH timestamps AS (
SELECT '2019-01-06 03:30:00'::timestamp as ts1, '2019-01-07 08:50:00'::timestamp as ts2
)
SELECT 60 as minutes
FROM timestamps, generate_series(1, (EXTRACT(EPOCH FROM ts2 - ts1) / 60 / 60)::int)
UNION ALL
SELECT (EXTRACT(EPOCH FROM ts2 - ts1) / 60)::int % 60
FROM timestamps
- 将秒计算为小时
/ 60 / 60
- 计算剩余的秒数
/ 60 % 60
(第一步给你分钟,模运算符%
给你剩余的分钟到小时)
推荐阅读
- python - 我可以仅使用 url 在 GDrive 中上传图像吗?
- r - Converting String to Integers R
- asp.net-mvc - Web Garden - MachineKey and cookieless necessary in single hosting server?
- javascript - 使用 RxJS 等到组件不为空
- c++ - Instantiate constructor with Class pointer as a parameter
- javascript - 我们可以在 React js 的另一个组件中创建和存储对类的引用吗
- julia - 您如何将转换应用于 Julia 数据框?
- javascript - 将数组值传入 JSON 格式
- javascript - 未捕获的 ReferenceError:$ 未定义/Chrome 扩展未更新
- sql - 在数据加载期间创建索引