【发布时间】:2018-11-03 00:20:07
【问题描述】:
对于查询:
SELECT '2018-03-01'::TIMESTAMP - '2018-09-01'::TIMESTAMP,
'2018-03-01'::TIMESTAMPTZ - '2018-09-01'::TIMESTAMPTZ;
返回值-184 days 对应TIMESTAMP 和-183 days -23:00:00 对应TIMESTAMPTZ。
对我来说,-184 days“似乎”是正确的,但我总是被告知使用TIMESTAMPTZ。哪个是正确答案?
【问题讨论】:
-
Timestamptz 实际上是带有时区数据类型的时间戳,它也处理时区。它在值的末尾指定时区,如下所示:
+01。亲自查看select current_date::timestamptz。数据类型的选择是根据具体情况选择的。 -
@KamilG。但是如果
TIMESTAMPTZ对每个值应用相同的时区数据,那么差异不应该是一样的吗? -
结果
-183 days -23:00:00是正确的。请对此进行调查:select '2018-03-01'::timestamptz , '2018-09-01'::timestamptz;可能由于夏令时的原因,时区时差为 1 小时。减去timestamp类型时情况并非如此,因为它不会查看跨区域和日历的时间差异。 -
@KamilG。啊,夏令时开始发挥作用。明白了。如果您发布答案,我可以接受它
-
@KamilG。我认为这与日光谚语无关
SELECT '2018-03-01'::TIMESTAMP - '2018-03-20'::TIMESTAMP, '2018-03-01'::timestamptz - '2018-03-20'::timestamptz;在1 hour中仍然存在差异@
标签: postgresql timestamp