1. ホーム
  2. sql

[解決済み】Postgresqlでdatetimeフィールドの日付を比較する方法は?

2022-04-07 16:45:22

質問

Postgresql(バージョン9.2.4、Windows)で日付を比較する際に、奇妙なシナリオに直面しました。

私のテーブルには 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番目のクエリは機能しているのに、最初のクエリは機能していないのでしょうか?

どうすればいいですか?

キャスティングについては@Nicolaiの言うとおりで、どのようなデータに対しても条件がfalseになるのは、入力文字列に対する日付操作を避けたいからではないでしょうか? 恐れる必要はありません。

SELECT *
FROM table
WHERE update_date >= '2013-05-03'::date
AND update_date < ('2013-05-03'::date + '1 day'::interval);