Wir können die folgende Methode in PostgreSQL verwenden, um den ersten Tag eines bestimmten Monats zurückzugeben.
Dies kann der erste Tag des aktuellen Monats oder der erste Tag des Monats sein, basierend auf einem von uns festgelegten Datum.
Wenn wir den ersten Tag des Monats erhalten, können wir weitere Berechnungen mit dem resultierenden Datum durchführen, wie z. B. das Hinzufügen einer bestimmten Anzahl von Tagen zum Monatsanfang usw.
Beginn des aktuellen Monats
Hier ist ein Beispiel, das den ersten Tag des aktuellen Monats zurückgibt:
SELECT date_trunc('month', now());
Ergebnis:
2022-04-01 00:00:00+10
Dabei wird date_trunc()
von PostgreSQL verwendet Funktion, 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.
Wir können es bei Bedarf in einen Datumswert umwandeln:
SELECT date_trunc('month', now())::date;
Ergebnis:
2022-04-01
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())::date AS "Start of Month";
Ergebnis:
+--------------+----------------+ | Current Date | Start of Month | +--------------+----------------+ | 2022-04-09 | 2022-04-01 | +--------------+----------------+
Beginn eines bestimmten Monats
Es muss nicht der Anfang des laufenden Monats sein. Wir können ein beliebiges Datum angeben und es wird basierend auf diesem Datum den Beginn des Monats zurückgeben.
Beispiel:
SELECT date_trunc('month', date '2030-07-14')::date;
Ergebnis:
2030-07-01
Wir können das Ergebnis dann verwenden, um andere Aktionen darauf auszuführen. Zum Beispiel können wir dem Ergebnis eine bestimmte Anzahl von Tagen wie folgt hinzufügen:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Ergebnis:
2030-07-21
Datenbankbeispiel
Hier ist ein Beispiel, das Daten aus einer Datenbank verwendet:
SELECT
rental_date,
date_trunc('month', rental_date)::date AS "The 1st of the Month",
date_trunc('month', rental_date)::date + 19 AS "The 20th of the Month"
FROM rental WHERE customer_id = 459 LIMIT 10;
Ergebnis:
+---------------------+----------------------+-----------------------+ | rental_date | The 1st of the Month | The 20th of the Month | +---------------------+----------------------+-----------------------+ | 2005-05-24 22:54:33 | 2005-05-01 | 2005-05-20 | | 2005-06-17 02:50:51 | 2005-06-01 | 2005-06-20 | | 2005-06-17 09:38:22 | 2005-06-01 | 2005-06-20 | | 2005-06-17 16:40:33 | 2005-06-01 | 2005-06-20 | | 2005-06-20 02:39:21 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:35:44 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:42:00 | 2005-06-01 | 2005-06-20 | | 2005-06-21 02:39:44 | 2005-06-01 | 2005-06-20 | | 2005-07-06 00:22:29 | 2005-07-01 | 2005-07-20 | | 2005-07-08 02:51:23 | 2005-07-01 | 2005-07-20 | +---------------------+----------------------+-----------------------+