对于查询:
SELECT '2018-03-01'::TIMESTAMP - '2018-09-01'::TIMESTAMP,
'2018-03-01'::TIMESTAMPTZ - '2018-09-01'::TIMESTAMPTZ;
返回-184 days
的{{1}}和TIMESTAMP
的{{1}}。
对我来说,-183 days -23:00:00
"似乎"但是我总是被告知要使用TIMESTAMPTZ
。哪个是正确的答案?
答案 0 :(得分:5)
答案在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小时差异最有可能来自夏令时和随时间变化的时区。
一般情况下,我总是会选择在我的系统中加入时区来正确处理世界各地的时差,并避免因没有这个问题而产生的问题。客户端和服务器可能有不同的时区,可能会导致问题。