你需要使用 「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。你想達到什麼目的?你會預期會發生什麼結果?你已經試過了什麼? –