select
to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >=
to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a')
and
to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <=
to_timestamp('2013-06-24 11:50:00 AM', 'yyyy-MM-dd hh:mi:ss a') as a;
是真的,但是:
select
to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >=
to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a')
and
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') as a
结果是假的
请解决..
答案 0 :(得分:2)
你需要使用“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
未被识别。我们来看看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的步骤。
答案 1 :(得分:1)
我检查了您发布的以下查询,发现to_timestamp函数返回以下结果进行比较。
-----查询下面返回0(即错误)-----
select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >= to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a') and 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')as a
---以下是比较的条件 -
第一个要比较的条件(返回True)
to_timestamp('2013-06-24 11:36:40 AM','yyyy-MM-dd hh:mi:ss a') - &gt; 2013年6月24日10:36:40 + 0000
to_timestamp('2013-06-24 11:20:00 AM','yyyy-MM-dd hh:mi:ss a') - &gt; 2013年6月24日10:20:00 + 0000
---要比较的第二个条件(返回false) -
to_timestamp('2013-06-24 11:36:40 AM','yyyy-MM-dd hh:mi:ss a') - &gt; 2013年6月24日10:36:40 + 0000
to_timestamp('2013-06-24 12:50:00 PM','yyyy-MM-dd hh:mi:ss a') - &gt; 2013年6月23日23:50:00 + 0000
正如您所注意到的那样,第二个条件将2013年6月24日与2013年6月23日比较为假。
尝试使用以下返回True结果的查询
/ ---下面的查询返回1(ieTrue)---- /
select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh24:mi:ss a')
>= to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh24:mi:ss a')
and to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh24:mi:ss a')
<= to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh24:mi:ss a')as a
在上面的查询中我使用24Hr格式进行比较。(yyyy-MM-dd hh24:mi:ss)
上测试了结果我希望这会对你有所帮助。
由于 Jignesh