Met datums (en tijden) worden veel dingen eenvoudiger als je >= start AND < end
. gebruikt .
Bijvoorbeeld:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
In dit geval moet je nog steeds de startdatum van de maand die je nodig hebt berekenen, maar dat zou op een aantal manieren eenvoudig moeten zijn.
Ook de einddatum is vereenvoudigd; voeg gewoon precies een maand toe. Geen gedoe met 28e, 30e, 31e, etc.
Deze structuur heeft ook het voordeel dat het gebruik van indexen kan behouden.
Veel mensen kunnen een formulier als het volgende voorstellen, maar niet gebruik indexen:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
Dit houdt in dat de voorwaarden voor elke afzonderlijke rij in de tabel worden berekend (een scan) en dat er geen index wordt gebruikt om het rijbereik te vinden dat overeenkomt (een bereikzoeken).