有两个时间戳,结果以分钟为单位,可以说320分钟,我需要计算完整小时数,可以说我们这里有5h和20分钟,我需要在分钟列中插入6行(5行,其中60分钟为分钟)专栏,最后20分钟)
在Postgres,某些循环或尝试使用cte选择数字的最佳方法是什么?
答案 0 :(得分:1)
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
计算剩余的秒数(第一步为您提供分钟,模运算符%
为您提供剩余的小时数)