Vi kan bruge følgende metode i PostgreSQL til at returnere den første dag i en given måned.
Dette kan være den første dag i den aktuelle måned eller den første dag i måneden baseret på en dato, som vi angiver.
At få den første dag i måneden giver os mulighed for at udføre yderligere beregninger på den resulterende dato, som f.eks. at tilføje et bestemt antal dage til starten af måneden osv.
Begyndelsen af den aktuelle måned
Her er et eksempel, der returnerer den første dag i den aktuelle måned:
SELECT date_trunc('month', now());
Resultat:
2022-04-01 00:00:00+10
Dette bruger PostgreSQL's date_trunc()
funktion for at returnere de resultater, vi ønsker. Denne funktion afkorter en dato/tidsværdi med en specificeret præcision.
I dette tilfælde bruger jeg now()
funktion for at returnere den aktuelle dato og 'month'
argument ændrer denne dato til begyndelsen af måneden.
Vi kan caste det til en datoværdi, hvis det kræves:
SELECT date_trunc('month', now())::date;
Resultat:
2022-04-01
Her er det igen, sammen med den faktiske dato, hvor jeg kørte eksemplet:
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 | +--------------+----------------+
Start af en specificeret måned
Det behøver ikke at være starten på den aktuelle måned. Vi kan angive en hvilken som helst dato, og den vil returnere begyndelsen af måneden, baseret på den dato.
Eksempel:
SELECT date_trunc('month', date '2030-07-14')::date;
Resultat:
2030-07-01
Vi kan derefter bruge resultatet til at udføre andre handlinger på det. For eksempel kan vi tilføje et givet antal dage til resultatet på denne måde:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Resultat:
2030-07-21
Databaseeksempel
Her er et eksempel, der bruger datoer fra en database:
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 | +---------------------+----------------------+-----------------------+