Wir können die folgende Technik in PostgreSQL verwenden, um den letzten Tag eines bestimmten Monats zurückzugeben.
Dies kann der letzte Tag des aktuellen Monats oder der letzte Tag des Monats sein, basierend auf einem von uns festgelegten Datum.
Ende des aktuellen Monats
Hier ist ein Beispiel, das den letzten Tag des aktuellen Monats zurückgibt:
SELECT (date_trunc('month', now()) + interval '1 month - 1 day');
Ergebnis:
2022-04-30 00:00:00+10
Dabei wird date_trunc()
von PostgreSQL verwendet zusammen mit etwas Datumsarithmetik, um die gewünschten Ergebnisse zurückzugeben. Diese Funktion kürzt einen Datums-/Uhrzeitwert auf eine angegebene Genauigkeit.
In diesem Fall verwende ich den now()
Funktion, um das aktuelle Datum und den 'month'
zurückzugeben -Argument ändert dieses Datum auf den Anfang des Monats. Ich habe dann einen Monat dazu addiert (was es zum Beginn des folgenden Monats bringt) und dann einen Tag von diesem Datum abgezogen, um uns das Ende des vorherigen Monats zu geben (was das Ende des aktuellen Monats ist).
Wir können es bei Bedarf in einen Datumswert umwandeln:
SELECT (date_trunc('month', now()) + interval '1 month - 1 day')::date;
Ergebnis:
2022-04-30
Hier ist es noch einmal, zusammen mit dem tatsächlichen Datum, an dem ich das Beispiel ausgeführt habe:
SELECT
now()::date AS "Current Date",
(date_trunc('month', now()) + interval '1 month - 1 day')::date AS "End of Month";
Ergebnis:
+--------------+--------------+ | Current Date | End of Month | +--------------+--------------+ | 2022-04-09 | 2022-04-30 | +--------------+--------------+
Ende eines bestimmten Monats
Es muss nicht das Ende des laufenden Monats sein. Wir können ein beliebiges Datum angeben und es wird basierend auf diesem Datum das Ende des Monats zurückgegeben.
Beispiel:
SELECT (date_trunc('month', date '2030-07-14') + interval '1 month - 1 day')::date;
Ergebnis:
2030-07-31
Datenbankbeispiel
Hier ist ein Beispiel, das Daten aus einer Datenbank verwendet:
SELECT
rental_date,
(date_trunc('month', rental_date) + interval '1 month - 1 day')::date AS "End of Month"
FROM rental WHERE customer_id = 459 LIMIT 10;
Ergebnis:
+---------------------+--------------+ | rental_date | End of Month | +---------------------+--------------+ | 2005-05-24 22:54:33 | 2005-05-31 | | 2005-06-17 02:50:51 | 2005-06-30 | | 2005-06-17 09:38:22 | 2005-06-30 | | 2005-06-17 16:40:33 | 2005-06-30 | | 2005-06-20 02:39:21 | 2005-06-30 | | 2005-06-20 12:35:44 | 2005-06-30 | | 2005-06-20 12:42:00 | 2005-06-30 | | 2005-06-21 02:39:44 | 2005-06-30 | | 2005-07-06 00:22:29 | 2005-07-31 | | 2005-07-08 02:51:23 | 2005-07-31 | +---------------------+--------------+