sql >> データベース >  >> RDS >> PostgreSQL

日付範囲間のPostgresqlクエリ

    日付(および時刻)を使用すると、>= 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. MySQL Workbenchチュートリアル–RDBMSツールの包括的なガイド

    2. レコードが見つからない場合はゼロを返します

    3. MariaDBでのABS()のしくみ

    4. MySQLタイプのテキストの最大長