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

Wie ermittle ich den letzten Tag des Vormonats mit PostgreSQL?

Beide Lösungen enthalten letzten Tag des Vormonats und auch inklusive alles von "heute".

Für ein date Spalte:

SELECT *
FROM   tbl
WHERE  my_date BETWEEN date_trunc('month', now())::date - 1
               AND     now()::date

Sie können einfache ganzzahlige Werte von einem date subtrahieren (aber nicht von einem timestamp ) um Tage abzuziehen. Dies ist der einfachste und schnellste Weg.

Für einen timestamp Spalte:

SELECT *
FROM   tbl
WHERE  my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND    my_timestamp <  date_trunc('day'  , now()) + interval '1 day'

Beachten Sie, dass ich den < verwende Operator für die zweite Bedingung, um genaue Ergebnisse zu erhalten (~ "vor morgen").

Ich caste nicht auf date in der zweiten Abfrage. Stattdessen füge ich ein interval '1 day' hinzu , um ein Hin- und Her-Casting zu vermeiden.

Sehen Sie sich die Datums-/Zeittypen und -funktionen im Handbuch an.