您需要使用“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)
好的,所以这是第二个意外不匹配的。时间戳看起来条件应该匹配,所以让我们看看每个函数的输出: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
没有被识别。让我们看一下文档:
AM, am, PM or pm
meridiem 指标(无句点)
看起来你想要am
or 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。