Vaše řešení je v pořádku. Pokud jsou data doslovná, preferuji však:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
To funguje úplně stejně, ale je lépe udržovatelné, protože je jasné, že každé doslovné „datum“ je časové razítko, nikoli datum. Předpokládejme například, že někdy někdo změní váš dotaz na následující
AND datefield <= '2012-01-01'
... očekáváte (a nedaří se) zahrnout do dotazu celý den „2012-01-01“. S pozdější syntaxí je záměr jasnější a tomuto zmatku je zabráněno.
Aby to bylo ještě jasnější (možná příliš upovídané), můžete provést explicitní obsazení:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Nepoužil bych to_date()
zde z podobných důvodů (potenciální záměna datových typů), ani to_timestamp()
(vrátí timestamptz
).
BTW, upravil jsem velikost písmen tak, aby odpovídal doporučené praxi (klíčová slova velkými písmeny, identifikátory malými písmeny)