我在两台不同的机器上有两个数据库,它们具有相同的模式、表和数据。我启动此查询:
select mydate from mytable where date = '2013-10-03 14:25:00-07'::timestamp::date
第一台机器返回正确的行,而第二台机器没有,两台机器具有相同的 prostgres 版本(9.2)
机器之间的唯一区别是第一个在 Windows 上运行,第二个在 Linux (Centos) 上运行
有什么建议吗?
我在两台不同的机器上有两个数据库,它们具有相同的模式、表和数据。我启动此查询:
select mydate from mytable where date = '2013-10-03 14:25:00-07'::timestamp::date
第一台机器返回正确的行,而第二台机器没有,两台机器具有相同的 prostgres 版本(9.2)
机器之间的唯一区别是第一个在 Windows 上运行,第二个在 Linux (Centos) 上运行
有什么建议吗?
'2013-10-03'
可以解释为Oct, 3rd或March, 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 中完全忽略时区
最干净的解决方案是,在会话开始时,只需发出以下命令:
SET datestyle = "ISO, YMD";
这将确保根据您的输入格式正确处理时间戳。