Psql错误的日期来自时间戳

时间:2016-12-08 10:07:31

标签: psql

云有人向我解释为什么在 psql 中将时间戳投射到日期会给我错误的价值?我的数据库存储时间戳值 2016-12-04 00:05:09.748000 ,我的机器时间是 UTC ,数据类型是 psql TIMESTAMP WITH TIME ZONE。如果我这样做了,

  

orders.completed ::日期

它给了我 2016-12-03 。问题是,如果我在午夜左右有一些订单,聚合函数会给我错误的值。有什么方法可以解决它吗?我将不胜感激任何帮助!

2 个答案:

答案 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)