4

postresql データベースのクエリに問題があります。特定の日時以降の最後の 100 件のログを取得しようとしていますが、次のクエリを使用すると:

select * from log_entry WHERE array['MESSAGE'] && tags AND CAST(last_updated AS DATE) >= '2013-02-28T16:47:26.394213' ORDER BY last_updated DESC LIMIT 100

ここで、列 last_updated のタイプは次のとおりです: タイムゾーンなしのタイムスタンプ

「2013-02-28T16:47:26.394213」より前のログを取得することがありますが、何か問題がありますか? キャストを使用する代わりにこれを行うより良い方法はありますか?

前もって感謝します!

4

2 に答える 2

4

(リクエストによりコメントから再投稿。)

問題があります。タイムスタンプ(タイムゾーンの有無にかかわらず)を日付にキャストすると、タイムスタンプの時間部分が切り捨てられます。タイムスタンプにキャスト'2013-02-28T16:47:26.394213'して、直接比較してみませんlast_updatedか?

select * from log_entry 
WHERE array['MESSAGE'] && tags 
AND last_updated 
  >= '2013-02-28T16:47:26.394213'::timestamp without time zone
ORDER BY last_updated DESC LIMIT 100
于 2013-02-28T17:30:00.003 に答える