在我的Posgresql数据库中,我有IANA格式的值时区列作为文本。我能把这个值转换成int查询吗?
例如在我的列America/New_York
的值,我需要得到值-4/5
在我的脚本。
我开始从数据库中获取我的值,但不知道下一步该怎么做。
Select settings.time_zone into time_z from time_zone where id = 1
有可能吗?
这并不适用于每个时区,因为有些时区并不是按整个小时进行偏移的。要获得作为interval
的偏移量,可以使用
SELECT TIMESTAMP WITH TIME ZONE '2000-01-01 00:00:00+00'
AT TIME ZONE 'America/New_York'
- TIMESTAMP '2000-01-01 00:00:00';
?column?
═══════════
-05:00:00
(1 row)
如果您确定您永远不会处理在整个小时内没有偏移的时区,您可以通过提取小时数来获得一个整数:
SELECT CAST (
EXTRACT (
hours FROM
TIMESTAMP WITH TIME ZONE '2000-01-01 00:00:00+00'
AT TIME ZONE 'America/New_York'
- TIMESTAMP '2000-01-01 00:00:00'
) AS integer
);
cast
══════
-5
(1 row)
可以使用任意表达式代替字符串字面值'America/New_York'
。
注意您选择的日期(在我的示例中是2000-01-01)很重要。例如,如果时区有夏令时,您将得到不同的结果,并且您选择了夏季的一天,那么2000年的时区可能会有所不同。所以要明智地选择。