あなたの解決策は大丈夫です。ただし、日付がリテラルの場合は、次のようにします。
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
これはまったく同じように機能しますが、各文字通りの「日付」が日付ではなくタイムスタンプであることが明確になるため、より保守しやすくなります。たとえば、誰かがクエリを次のように変更したとします
AND datefield <= '2012-01-01'
...クエリに1日「2012-01-01」が含まれることを期待しています(そして失敗しています)。後者の構文では、意図がより明確になり、この混乱が防止されます。
さらに明確にするために(おそらく冗長すぎる)、明示的なキャストを行うことができます:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
to_date()
は使用しません ここでも同様の理由(データ型の混乱の可能性)、またはto_timestamp()
(timestamptz
を返します 。
ところで、推奨される方法(大文字のキーワード、小文字の識別子)に準拠するように大文字と小文字を変更しました