我正在使用postgresql 8.3,我想知道特定时间戳的时区(表中的一列).
在文档中我发现了关键字"timezone"
但我不明白如何在表格列中应用它.可能吗 ?
我假设你有一个名为列ct
具有类型TIMESTAMPTZ
的表t
.然后你可以使用:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
以秒为单位获取时区的偏移量.这是给你3600
的UTC
/ GMT
这意味着要么GMT+1
,CET
或什么的.返回的值取决于您的TIMEZONE
设置.
样本(我住在德国,实际时区ist GMT+1
/ CET
):
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz; timestamptz ------------------------ 2008-01-01 18:00:00+01 test=# set timezone to 'gmt'; SET test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz; timestamptz ------------------------ 2008-01-01 17:00:00+00
如您所见,它始终在配置的时区中输出任何内容.因此,您将获得的偏移EXTRACT(TIMEZONE FROM ...)
取决于您的TIMEZONE
设置.给出的时区INSERT
丢失了,因为它不值得保存.重要的是,一切都是正确的,不应该取决于TIMEZONE
设置.PostgreSQL做得非常好.
"PostgreSQL做得非常好."
我真的很喜欢PostgreSQL,但在这个特殊的功能中,它并不是很好.时区不仅抵消了GMT.时区对于暗示夏令时的政治规则是紧迫的.由于有大量时区具有相同的偏移和不同的夏令时规则 - 当PG忘记原始时区时,它实际上会丢失信息.
我个人将原始时区分别存储在"America/New_York"形式的重要日期.如果有人有更好的解决方案 - 欢迎.