日付(および時刻)を使用すると、>= 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
これには、テーブル内のすべての行の条件を計算し(スキャン)、一致する行の範囲を見つけるためにインデックスを使用しない(範囲シーク)ことが含まれます。