postgresql (Windows のバージョン 9.2.4) で日付を比較するときに奇妙なシナリオに直面しています。
テーブルに というupdate_date
タイプの列がありますtimestamp without timezone
。
クライアントは、このフィールドを日付のみ (例: 2013-05-03
) または時刻を含む日付 (例: 2013-05-03 12:20:00
) で検索できます。
この列には現在、すべての行のタイムスタンプの値があり、日付部分は同じです2013-05-03
が、時刻部分が異なります。
この列を比較すると、異なる結果が得られます。次のようになります。
select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-03' -> No results
select * from table where update_date >= '2013-05-03' AND update_date < '2013-05-03' -> No results
select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-04' -> results found
select * from table where update_date >= '2013-05-03' -> results found
私の質問は、最初のクエリで結果を取得するにはどうすればよいかということです。つまり、なぜ 3 番目のクエリは機能するのに、最初のクエリは機能しないのでしょうか。
ベストアンサー1
@Nicolai は、キャストと、条件がどのデータに対しても false になる理由について正しいです。入力文字列の日付操作を避けたいので、最初の形式を好むのだと思いますが、違いますか? 恐れる必要はありません。
SELECT *
FROM table
WHERE update_date >= '2013-05-03'::date
AND update_date < ('2013-05-03'::date + '1 day'::interval);