对于查询:
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
。哪个是正确的答案? 最佳答案
发布的答案是对OP的问题下的评论讨论的补充。
数据类型timestamptz
实际上是带时区的时间戳,而timestamp
是没有时区的时间戳。
减去如下所示的这些特定日期,您得到的结果是正确的,相差1小时
SELECT '2018-03-01'::TIMESTAMPTZ - '2018-09-01'::TIMESTAMPTZ;
这是因为
2018-03-01::timestamptz
具有+01
而2018-09-01
具有+02
。通过此查询亲自查看
SELECT '2018-03-01'::TIMESTAMPTZ, '2018-09-01'::TIMESTAMPTZ
1小时时差最有可能是来自夏时制和时区变化。
通常,我总是选择在系统中包括时区,以正确处理世界各地的时差,并避免因没有时区而引起的问题。客户端和服务器可能具有不同的时区,这可能会导致问题。