Nous pouvons utiliser la technique suivante dans PostgreSQL pour renvoyer le dernier jour d'un mois donné.
Il peut s'agir du dernier jour du mois en cours ou du dernier jour du mois en fonction d'une date que nous spécifions.
Fin du mois en cours
Voici un exemple qui renvoie le dernier jour du mois en cours :
SELECT (date_trunc('month', now()) + interval '1 month - 1 day');
Résultat :
2022-04-30 00:00:00+10
Ceci utilise le date_trunc()
de PostgreSQL fonction, ainsi qu'une arithmétique de date pour renvoyer les résultats que nous voulons. Cette fonction tronque une valeur de date/heure à une précision spécifiée.
Dans ce cas, j'utilise le now()
fonction pour retourner la date actuelle, et le 'month'
l'argument modifie cette date au début du mois. J'ai ensuite ajouté un mois à cela (ce qui l'amène au début du mois suivant), puis soustrait un jour à cette date pour nous donner la fin du mois précédent (qui est la fin du mois en cours).
Nous pouvons le convertir en une valeur de date si nécessaire :
SELECT (date_trunc('month', now()) + interval '1 month - 1 day')::date;
Résultat :
2022-04-30
Le voici à nouveau, avec la date réelle à laquelle j'ai exécuté l'exemple :
SELECT
now()::date AS "Current Date",
(date_trunc('month', now()) + interval '1 month - 1 day')::date AS "End of Month";
Résultat :
+--------------+--------------+ | Current Date | End of Month | +--------------+--------------+ | 2022-04-09 | 2022-04-30 | +--------------+--------------+
Fin d'un mois spécifié
Il n'est pas nécessaire que ce soit la fin du mois en cours. Nous pouvons spécifier n'importe quelle date, et il renverra la fin du mois, en fonction de cette date.
Exemple :
SELECT (date_trunc('month', date '2030-07-14') + interval '1 month - 1 day')::date;
Résultat :
2030-07-31
Exemple de base de données
Voici un exemple qui utilise des dates d'une base de données :
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;
Résultat :
+---------------------+--------------+ | 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 | +---------------------+--------------+