2013-06-24 76 views
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 11:50:00 AM', 'yyyy-MM-dd hh:mi:ss a') as a; 

是真实的,但:检索时间戳之间的PostgreSQL

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

“*请解决它*”。请根据新用户帮助中提供的指导提供可以回答的详细问题:http://stackoverflow.com/help以及有关在此处询问更好的PostgreSQL问题的指导:http://stackoverflow.com/tags/postgresql/info。你想达到什么目的?你会预期会发生什么结果?你已经试过了什么? –

回答

1

我已经检查了以下查询您发布的发现即to_timestamp函数返回下面的结果进行比较。

-----下面的查询返回0(ieFalse)-----

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 


---以下是comparison--
第一条件的条件('返回True') to_timestamp('2013-06-24 11:36:40 AM','yyyy-MM-dd hh:mi:ss a') - > June 2013,2013 10:36:40 +0000 to_timestamp('2013-06-24 11:20:00 AM','yyyy-MM-dd hh:mi:ss a') - > 2013年6月24日10:20:00 + 0000


---第二个条件比较(这返回false) -
to_timestamp('2013-06-24 11:36:40 AM','yyyy-MM-dd hh:mi:ss a' ) - > 2013年6月24日10:36:40 + 0000 to_timestamp('2013-06-24 12:50:00 PM','yyyy-MM-dd hh:mi:ss a') - > June ,23 2013 23:50:00 + 0000


正如您已经注意到的那样,第二种情况比较2013年6月,2013年6月和2013年6月23日,这返回false。

尝试下面查询它返回真结果
/---下面查询返回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 

在上面的查询我已经使用24小时格式进行比较(YYYY-MM-DD HH24:MI:SS)

我有测试上http://sqlfiddle.com/

我希望这有助于你的结果。

感谢 Jignesh

+0

您使用的诊断过程很好,但结论是错误的。使用'hh24'将无法正确处理,比如'2:20:00 pm'。你真的想要'am' meridiem指标格式占位符。尽管出现了这个错误,但请注意 - 谢谢你参与并试图帮助别人。 –

+0

是啊..谢谢你先生 – user2493093

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) 

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指标(无期限)

看起来像你想ampm,不只是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.

+0

是啊得到​​了它谢谢你先生..有一个美好的一天 – user2493093

+0

@ user2493093很高兴提供帮助。我希望你也得到了一些能够帮助你解决未来问题的信息,并在你不能的时候提出更好的问题。如果这有帮助,请参阅http://stackoverflow.com/help/someone-answers。 –