PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir le dernier jour du mois dans PostgreSQL

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