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

Ottieni l'ultimo giorno del mese in PostgreSQL

Possiamo usare la seguente tecnica in PostgreSQL per restituire l'ultimo giorno di un determinato mese.

Potrebbe essere l'ultimo giorno del mese corrente o l'ultimo giorno del mese in base a una data da noi specificata.

Fine del mese in corso

Ecco un esempio che restituisce l'ultimo giorno del mese corrente:

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

Risultato:

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

Questo utilizza date_trunc() di PostgreSQL funzione, insieme ad alcune date aritmetiche per restituire i risultati desiderati. Questa funzione tronca un valore di data/ora con una precisione specificata.

In questo caso utilizzo now() funzione per restituire la data corrente e il 'month' argomento modifica tale data all'inizio del mese. Ho quindi aggiunto un mese a quello (che lo porta all'inizio del mese successivo), quindi ho sottratto un giorno da quella data per darci la fine del mese precedente (che è la fine del mese corrente).

Possiamo eseguirne il cast su un valore di data, se necessario:

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

Risultato:

2022-04-30

Eccolo di nuovo, insieme alla data effettiva in cui ho eseguito l'esempio:

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

Risultato:

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

Fine di un mese specificato

Non deve essere per forza la fine del mese in corso. Possiamo specificare qualsiasi data e restituirà la fine del mese, in base a quella data.

Esempio:

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

Risultato:

2030-07-31

Esempio di database

Ecco un esempio che utilizza le date di un 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;

Risultato:

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