データベースの検索を行う際に、日付比較をするSQL文を書く事はよくあります。
しかし、PostgreSQLでCURRENT_TIMESTAMP
を使うと、タイムスタンプを含むため、日付みのデータと正しく比較できないことがあります。
これは「当日のデータが収集できない」という問題に繋がることがあります。
この記事では、その問題の原因を説明し、その解決方法を詳しく解説します。
目次
問題の原因
PostgreSQLのCURRENT_TIMESTAMP
は、現在の日付と時刻を含むタイムスタンプを返します。
ただし、データベースの日付が、時刻を含まないフォーマットで保存されている場合、日付の比較で一致しなくなることがあります。
解決方法
この問題を解決するには、CURRENT_DATE
を使うことを推奨します。CURRENT_DATE
は時刻を含まず、当日の日付のみを返します。
これにより、日付比較が正しく行われるようになります。
修正前のSQL
1 |
WHERE update_dt = CURRENT_TIMESTAMP |
修正後のSQL
1 |
WHERE update_dt = CURRENT_DATE |
これで、日付みのデータでも正しく比較され、当日のデータを収集できるようになります。
これらの比較を従来のようにタイムスタンプを含む日時で行う必要がある場合、キャストや日付の変換を通じて試みて下さい。
まとめ
PostgreSQLでは、日付と時刻を含むタイムスタンプの比較に気を付ける必要があります。CURRENT_TIMESTAMP
の代わりにCURRENT_DATE
を使うことで、日付のみの比較を正しく行えるようになり、当日のデータが収集できるようになります。
コメント