0

我在两台不同的机器上有两个数据库,它们具有相同的模式、表和数据。我启动此查询:

select mydate from mytable where date = '2013-10-03 14:25:00-07'::timestamp::date

第一台机器返回正确的行,而第二台机器没有,两台机器具有相同的 prostgres 版本(9.2)

机器之间的唯一区别是第一个在 Windows 上运行,第二个在 Linux (Centos) 上运行

有什么建议吗?

4

2 回答 2

1

'2013-10-03'可以解释为Oct, 3rdMarch, 10th,具体取决于您的datestyle设置。@Chris 对此有更多了解。

除此之外,您的查询通常是不正确的。这种表述具有误导性:

'2013-10-03 14:25:00-07'::timestamp

timestamp在 Postgres 中默认为timestamp without time zone,它不识别时区偏移量。因此,时区偏移量-07丢弃

改用:

'2013-10-03 14:25:00-07'::timestamptz

匹配时间点

SELECT * FROM mytable
WHERE mydate = '2013-10-03 14:25:00-07'::timestamptz

取决于您的本地时区设置,因为该列的数据类型timestamp with time zone正如您在稍后的评论中阐明的那样。

比赛当天

...
WHERE mydate::date = '2013-10-03 14:25:00-07'::timestamptz::date

取决于您当地的时区设置,它定义了“日”的上下边界。

此相关答案中的详细说明:
在 Rails 和 PostgreSQL 中完全忽略时区

于 2013-11-22T17:01:01.917 回答
0

最干净的解决方案是,在会话开始时,只需发出以下命令:

SET datestyle = "ISO, YMD";

这将确保根据您的输入格式正确处理时间戳。

于 2013-11-22T05:33:14.760 回答