Postgresql の datetime フィールドで日付を比較するにはどうすればいいですか? 質問する

Postgresql の datetime フィールドで日付を比較するにはどうすればいいですか? 質問する

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);

おすすめ記事