Bei Datumsangaben (und Uhrzeiten) wird vieles einfacher, wenn Sie >= start AND < end
verwenden .
Zum Beispiel:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
In diesem Fall müssen Sie immer noch das Startdatum des gewünschten Monats berechnen, aber das sollte in vielerlei Hinsicht einfach sein.
Auch das Enddatum wird vereinfacht; Fügen Sie einfach genau einen Monat hinzu. Kein Herumspielen mit 28., 30., 31. usw.
Diese Struktur hat auch den Vorteil, dass die Verwendung von Indizes beibehalten werden kann.
Viele Leute können ein Formular wie das folgende vorschlagen, aber sie tun es nicht Indizes verwenden:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
Dies beinhaltet die Berechnung der Bedingungen für jede einzelne Zeile in der Tabelle (ein Scan) und nicht die Verwendung von Index, um den Bereich von Zeilen zu finden, die übereinstimmen (eine Bereichssuche).