1. ホーム
  2. sql

[解決済み] Postgresql の日付範囲間のクエリ

2022-04-24 01:23:11

質問

Postgresqlのデータベースに照会して、ある日付が特定の月と年に含まれる結果を返そうとしています。言い換えれば、ある月と年のすべての値が欲しいのです。

今までのところ、このような方法しかありませんでした。

SELECT user_id 
FROM user_logs 
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'

この場合の問題は、テーブルを照会する前に、最初の日付と最後の日付を計算しなければならないことです。もっと簡単な方法はないでしょうか?

ありがとうございます。

解決方法は?

日付(と時間)の場合、多くのことが単純になります。 >= start AND < end .

例えば

SELECT
  user_id
FROM
  user_logs
WHERE
      login_date >= '2014-02-01'
  AND login_date <  '2014-03-01'

この場合にも、必要な月の開始日を計算する必要がありますが、これはいくつもの方法で簡単にできるはずです。

終了日も単純で、ちょうど1ヶ月を追加するだけです。 28日、30日、31日など、ごちゃごちゃ考える必要はありません。



この構造には、インデックスを使い続けられるというメリットもある。



などの形を提案する人が多いかもしれませんが、彼らは しない はインデックスを使用します。

WHERE
      DATEPART('year',  login_date) = 2014
  AND DATEPART('month', login_date) = 2

これは、テーブルの1行ごとに条件を計算し(スキャン)、一致する行の範囲を見つけるためにインデックスを使用しない(範囲シーク)ことを意味します。