Vi kan använda följande metod i PostgreSQL för att returnera den första dagen i en given månad.
Detta kan vara den första dagen i den aktuella månaden eller den första dagen i månaden baserat på ett datum som vi anger.
Genom att få den första dagen i månaden kan vi utföra ytterligare beräkningar på det resulterande datumet, som att lägga till ett visst antal dagar i början av månaden, etc.
Början av den aktuella månaden
Här är ett exempel som returnerar den första dagen i innevarande månad:
SELECT date_trunc('month', now());
Resultat:
2022-04-01 00:00:00+10
Detta använder PostgreSQL:s date_trunc()
funktion för att returnera de resultat vi vill ha. Denna funktion trunkerar ett datum-/tidsvärde med en specificerad precision.
I det här fallet använder jag now()
funktion för att returnera det aktuella datumet och 'month'
argument ändrar det datumet till början av månaden.
Vi kan casta det till ett datumvärde om det behövs:
SELECT date_trunc('month', now())::date;
Resultat:
2022-04-01
Här är det igen, tillsammans med det faktiska datumet då jag körde exemplet:
SELECT
now()::date AS "Current Date",
date_trunc('month', now())::date AS "Start of Month";
Resultat:
+--------------+----------------+ | Current Date | Start of Month | +--------------+----------------+ | 2022-04-09 | 2022-04-01 | +--------------+----------------+
Början av en specificerad månad
Det behöver inte vara början av innevarande månad. Vi kan ange vilket datum som helst, och det kommer att returnera början av månaden, baserat på det datumet.
Exempel:
SELECT date_trunc('month', date '2030-07-14')::date;
Resultat:
2030-07-01
Vi kan sedan använda resultatet för att utföra andra åtgärder på det. Till exempel kan vi lägga till ett givet antal dagar till resultatet så här:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Resultat:
2030-07-21
Databasexempel
Här är ett exempel som använder datum från en databas:
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;
Resultat:
+---------------------+----------------------+-----------------------+ | 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 | +---------------------+----------------------+-----------------------+