云有人向我解释为什么在 psql 中将时间戳投射到日期会给我错误的价值?我的数据库存储时间戳值 2016-12-04 00:05:09.748000 ,我的机器时间是 UTC ,数据类型是 psql 是TIMESTAMP WITH TIME ZONE
。如果我这样做了,
orders.completed ::日期
它给了我 2016-12-03 。问题是,如果我在午夜左右有一些订单,聚合函数会给我错误的值。有什么方法可以解决它吗?我将不胜感激任何帮助!
答案 0 :(得分:1)
试试这个:
(orders.completed::timestamp at time zone 'UTC' at time zone 'America/Los_Angeles')::date;
您需要在查询中插入您的时区
答案 1 :(得分:0)
b=# set timezone to "GMT+10";
SET
b=# create table edge (t timestamptz);
CREATE TABLE
b=# insert into edge select now();
INSERT 0 1
b=# select t::date, t from edge;
t | t
------------+-------------------------------
2016-12-08 | 2016-12-08 00:18:30.740132-10
(1 row)