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

Postgresql-Abfrage zwischen Datumsbereichen

Bei Datumsangaben (und Uhrzeiten) wird vieles einfacher, wenn Sie >= start AND < end verwenden .

Zum Beispiel:

SELECT
  user_id
FROM
  user_logs
WHERE
      login_date >= '2014-02-01'
  AND login_date <  '2014-03-01'

In diesem Fall müssen Sie immer noch das Startdatum des gewünschten Monats berechnen, aber das sollte in vielerlei Hinsicht einfach sein.

Auch das Enddatum wird vereinfacht; Fügen Sie einfach genau einen Monat hinzu. Kein Herumspielen mit 28., 30., 31. usw.


Diese Struktur hat auch den Vorteil, dass die Verwendung von Indizes beibehalten werden kann.


Viele Leute können ein Formular wie das folgende vorschlagen, aber sie tun es nicht Indizes verwenden:

WHERE
      DATEPART('year',  login_date) = 2014
  AND DATEPART('month', login_date) = 2

Dies beinhaltet die Berechnung der Bedingungen für jede einzelne Zeile in der Tabelle (ein Scan) und nicht die Verwendung von Index, um den Bereich von Zeilen zu finden, die übereinstimmen (eine Bereichssuche).