我在两台具有相同模式,表格和数据的不同机器中有两个数据库。我启动了这个查询:
select mydate from mytable where date = '2013-10-03 14:25:00-07'::timestamp::date
第一台机器返回正确的行而第二台没有,两台机器都有相同的prostgres版本(9.2)
机器之间唯一不同的是第一个在Windows上运行,第二个在Linux上运行(Centos)
有什么建议吗?
答案 0 :(得分:1)
'2013-10-03'
可以解释为 10月,3日或 3月10日,具体取决于您的datestyle
设置。 @Chris has more on that.
除此之外,您的查询通常不正确。这个表达具有误导性:
'2013-10-03 14:25:00-07'::timestamp
Postgres中的 timestamp
默认为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
取决于您当地的时区设置,该设置定义了“日期”的下边框和上边框。
本相关答案的详细解释:
Ignoring timezones altogether in Rails and PostgreSQL
答案 1 :(得分:0)
最干净的解决方案是在会话开始时发出以下命令:
SET datestyle = "ISO, YMD";
这将确保根据您的输入格式正确处理时间戳。