你需要使用 “AM” 或 “PM” 不是 “a” 为12小时符。
to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am')
解决这个问题是一个简单的过程。第二个查询会出现意外的“错误”。所以你评估每个分支分别,看看哪一个是假的:
regress=> select
regress-> to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >=
regress-> to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a');
?column?
----------
t
(1 row)
regress=> select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <=
regress-> to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a') as a;
a
---
f
(1 row)
OK,所以它是一个的意外不匹配的第二个。时间戳看起来像条件应该匹配,所以让我们看看to_timestamp
功能在每个输出:
regress=> select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a'),
to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a');
to_timestamp | to_timestamp
------------------------+------------------------
2013-06-24 11:36:40+08 | 2013-06-24 00:50:00+08
(1 row)
咦,你会看到这一点。12:50已变成00:50
。 12小时的抵消表明PM
未被识别。让我们来看看the documentation:
AM, am, PM or pm
meridiem指标(无期限)
看起来像你想am
或pm
,不只是a
你在时间模式写你使用。让我们尝试更正指标:
regress=> select to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am');
to_timestamp
------------------------
2013-06-24 12:50:00+08
(1 row)
这样做。将其回送到原始查询中,并且...
select
to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss am') >=
to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss am')
and
to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss am') <=
to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am') as a
...按预期返回true。所以,你走了,这是一步一步解决问题101.
“*请解决它*”。请根据新用户帮助中提供的指导提供可以回答的详细问题:http://stackoverflow.com/help以及有关在此处询问更好的PostgreSQL问题的指导:http://stackoverflow.com/tags/postgresql/info。你想达到什么目的?你会预期会发生什么结果?你已经试过了什么? –