Din lösning är bra. Om datumen är bokstavliga, skulle jag dock föredra:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Detta fungerar på exakt samma sätt, men är mer underhållbart, eftersom det tydliggör poängen med att varje bokstavligt "datum" är en tidsstämpel, inte ett datum. Anta till exempel att någon någon gång ändrar din fråga till följande
AND datefield <= '2012-01-01'
... förväntar sig (och misslyckas med) att inkludera hela dagen "2012-01-01" i frågan. Med den senare syntaxen är avsikten tydligare och denna förvirring förhindras.
För att göra det ännu tydligare (kanske för utförligt) kan du göra den explicita rollbesättningen:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Jag skulle inte använda to_date()
här av liknande skäl (potentiell datatypförvirring), inte heller to_timestamp()
(det returnerar en timestamptz
).
BTW, jag har modifierat fallet för att följa rekommenderad praxis (sökord med versaler, identifierare med gemener)