2013-06-24 83 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。 –