sql >> Database teknologi >  >> RDS >> PostgreSQL

Få den sidste dag i måneden i PostgreSQL

Vi kan bruge følgende teknik i PostgreSQL til at returnere den sidste dag i en given måned.

Dette kan være den sidste dag i den aktuelle måned eller den sidste dag i måneden baseret på en dato, som vi angiver.

Udgangen af ​​den aktuelle måned

Her er et eksempel, der returnerer den sidste dag i den aktuelle måned:

SELECT (date_trunc('month', now()) + interval '1 month - 1 day');

Resultat:

2022-04-30 00:00:00+10

Dette bruger PostgreSQL's date_trunc() funktion, sammen med noget dato-aritmetik 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. Jeg tilføjede derefter en måned til det (hvilket bringer det til starten af ​​den følgende måned), og trak derefter en dag fra den dato for at give os slutningen af ​​den foregående måned (som er slutningen af ​​den nuværende måned).

Vi kan caste det til en datoværdi, hvis det kræves:

SELECT (date_trunc('month', now()) + interval '1 month - 1 day')::date;

Resultat:

2022-04-30

Her er det igen, sammen med den faktiske dato, hvor jeg kørte eksemplet:

SELECT 
    now()::date AS "Current Date",
    (date_trunc('month', now()) + interval '1 month - 1 day')::date AS "End of Month";

Resultat:

+--------------+--------------+
| Current Date | End of Month |
+--------------+--------------+
| 2022-04-09   | 2022-04-30   |
+--------------+--------------+

Udgangen af ​​en specificeret måned

Det behøver ikke at være slutningen af ​​den aktuelle måned. Vi kan angive en hvilken som helst dato, og den returnerer slutningen af ​​måneden, baseret på den dato.

Eksempel:

SELECT (date_trunc('month', date '2030-07-14') + interval '1 month - 1 day')::date;

Resultat:

2030-07-31

Databaseeksempel

Her er et eksempel, der bruger datoer fra en database:

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;

Resultat:

+---------------------+--------------+
|     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   |
+---------------------+--------------+

  1. Sådan automatiseres databasefailover med ClusterControl

  2. Kan du lide Operator in Entity Framework?

  3. Hvorfor bruger Oracle DBMS_STATS.GATHER_TABLE_STATS?

  4. Udforskning af MySQL Binlog Server – Ripple