Deine Lösung ist in Ordnung. Wenn die Datumsangaben Literale sind, würde ich jedoch bevorzugen:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Dies funktioniert genau gleich, ist aber wartungsfreundlicher, da es deutlich macht, dass jedes wörtliche "Datum" ein Zeitstempel und kein Datum ist. Angenommen, irgendwann ändert jemand Ihre Abfrage wie folgt:
AND datefield <= '2012-01-01'
... erwartet (und scheitert), den ganzen Tag "2012-01-01" in die Abfrage aufzunehmen. Mit der späteren Syntax ist die Absicht klarer und diese Verwirrung wird verhindert.
Um es noch deutlicher zu machen (vielleicht zu ausführlich), können Sie die explizite Umwandlung vornehmen:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Ich würde to_date()
nicht verwenden hier aus ähnlichen Gründen (mögliche Datentypverwechslung), noch to_timestamp()
(es gibt einen timestamptz
zurück ).
Übrigens habe ich die Groß-/Kleinschreibung geändert, um der empfohlenen Praxis zu entsprechen (Schlüsselwörter in Großbuchstaben, Bezeichner in Kleinbuchstaben)