PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL – Filtern Sie einen Datumsbereich

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)