Jouw oplossing is prima. Als de datums letterlijk zijn, zou ik echter liever hebben:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Dit werkt precies hetzelfde, maar is beter te onderhouden, omdat het duidelijk maakt dat elke letterlijke "datum" een tijdstempel is, geen datum. Stel bijvoorbeeld dat iemand uw zoekopdracht ooit in het volgende verandert:
AND datefield <= '2012-01-01'
... verwacht (en faalt) om de volledige dag "2012-01-01" in de query op te nemen. Met de latere syntax is de bedoeling duidelijker en wordt deze verwarring voorkomen.
Om het nog duidelijker te maken (misschien te uitgebreid), kun je de expliciete cast doen:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Ik zou to_date()
niet gebruiken hier om soortgelijke redenen (mogelijke verwarring over gegevenstypen), noch to_timestamp()
(het retourneert een timestamptz
).
Trouwens, ik heb de case aangepast om te voldoen aan de aanbevolen praktijk (zoekwoorden in hoofdletters, identifiers in kleine letters)