Wie kann ich feststellen, der Letzte Tag des vorherigen Monats mit PostgreSQL?
Brauche ich zur Abfrage einer PostgreSQL-Datenbank zu ermitteln, Datensätze, fallen in heutigen Datum und dem letzten Tag des vorherigen Monats. In anderen Worten, ich möchte zum abrufen von alles, was, die fällt zwischen Dezember 31, 2011 und heute. Diese Abfrage wieder verwendet werden, jeden Monat, also nächsten Monat, wird die Abfrage basierend auf dem aktuellen Datum und der Januar 31, 2012.
Ich habe gesehen,diese option, aber ich würde es vorziehen zu vermeiden, mit einer Funktion (wenn möglich).
- Warum wollen Sie vermeiden eine Funktion?
- Ich würde empfehlen die Verwendung einer Funktion, so haben Sie einen Punkt aktualisieren, wenn änderungen erforderlich sind, jedoch, wenn Sie es vermeiden wollen, ersetzen Sie einfach bei $1 date-Feld
- So wollen Sie zählen der Letzte Tag des letzten Monats?
- Ja, das ist in Ordnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide Lösungen gehören der Letzte Tag des vorherigen Monats und auch gehören alle von "heute".
Für eine
date
Spalte:Können Sie subtrahieren Reine integer-Werte aus einer
date
(aber nicht von einemtimestamp
) zu subtrahieren Tage. Dies ist der einfachste und Schnellste Weg.Für eine
timestamp
Spalte:Hinweis, dass ich die
<
Betreiber für die zweite Bedingung, um exakte Ergebnisse zu erhalten (~ "vor morgen").Ich nicht gegossen zu
date
in der zweiten Abfrage. Stattdessen füge ich eineinterval '1 day'
zu vermeiden, casting hin und her.Haben Sie einen Blick auf Datum /Zeit-Typen und Funktionen in der Anleitung.
my_date
in meinem Beispiel) ist nicht eigentlich eindate
, aber eintimestamp
. Sollten Sie diese Informationen bereitgestellt haben. Ich geändert meine Antwort mit einer zusätzlichen Lösung für Zeitstempel. Beachten Sie, dass die Lösung, die Sie beschreiben, in den Kommentar gehören würde, "morgen, 00:00 Uhr", das wäre falsch.Für immer Datum der vorigen/letzten Monat:
Ergebnis: 2012-11-30
Für immer Anzahl der Tage der vorigen/letzten Monat:
Ergebnis: 30
Versuchen Sie dies:
'-1 day'::interval
für die OP, die eigentliche Anforderungdate_trunc('MONTH', now()) - INTERVAL '1 day')
zu bekommen am Ende des Monats vor jetzt stattmy_date
Versuchen
nehmen von http://wiki.postgresql.org/wiki/Date_LastDay, und geändert und gibt nur die Tage in einem Monat
gibt 31
Referenz stammt aus diesem blog:
Sie können verwenden Sie folgende Funktion:
Probe-Ausführungen: