假设我有一个包含两个字段的表:snapshot_date(不带时区的时间戳(和时区(整数(,
snapshot_date | 时区 | |
---|---|---|
2021-01-12 08:00:00 | -3 | |
2021-01-12 00:00:00 | -5 |
您需要首先将小时数添加到时间戳中,然后提取小时:
extract(hour from snapshot_date + make_interval(hours => timezone))
使用获得预期结果
extract(hour from snapshot_date + interval '1 hour' * 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