Din løsning er fin. Hvis datoerne er bogstavelige, foretrækker jeg dog:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Dette udfører nøjagtigt det samme, men er mere vedligeholdeligt, fordi det tydeliggør pointen med, at hver bogstavelig "dato" er et tidsstempel, ikke en dato. Antag for eksempel, at nogen engang ændrer din forespørgsel til følgende
AND datefield <= '2012-01-01'
... forventer (og undlader) at inkludere hele dagen "2012-01-01" i forespørgslen. Med den senere syntaks er hensigten mere klar, og denne forvirring forhindres.
For at gøre det endnu mere overskueligt (måske for omfattende), kan du lave den eksplicitte rollebesætning:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Jeg ville ikke bruge to_date()
her af lignende årsager (potentiel datatypeforvirring), og heller ikke to_timestamp()
(det returnerer en timestamptz
).
BTW, jeg har ændret sagen for at overholde anbefalet praksis (søgeord med store bogstaver, identifikatorer med små bogstaver)