如何在 PostgreSQL 中将没有时区的时间戳和表示时区的整数转换为没有时区的新时间戳

How to convert timestamp without timezone and integer representing timezone to a new timestamp without timezone in PostgreSQL

假设我有一个包含两个字段的 table:snapshot_date(没有时区的时间戳)和时区(整数),

snapshot_date timezone
2021-01-12 08:00:00 -3
2021-01-12 00:00:00 -5

我需要从这个 table 中提取当地时间第二行你得到 -5,实际上应该是 19,因为根据时区调整的相应日期是 2021-01-11 19:00:00。所以我想做的是计算一个新的 snapshot_date 调整时区,这样我就可以正确提取小时后的时间。

您需要先将小时数添加到时间戳中,然后提取小时:

extract(hour from snapshot_date + make_interval(hours => timezone))

类似于:

show timezone; US/Pacific 
select ('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz; 
2021-01-12 03:00:00-08

select extract(hour from('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz);
3

设法获得预期结果:

extract(hour from snapshot_date + interval '1 hour' * timezone)