PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obter o último dia do mês no PostgreSQL


Podemos usar a seguinte técnica no PostgreSQL para retornar o último dia de um determinado mês.

Este pode ser o último dia do mês atual ou o último dia do mês com base em uma data que especificamos.

Fim do mês atual


Aqui está um exemplo que retorna o último dia do mês atual:
SELECT (date_trunc('month', now()) + interval '1 month - 1 day');

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

Isso usa o date_trunc() do PostgreSQL função, juntamente com alguma aritmética de data para retornar os resultados que queremos. Esta função trunca um valor de data/hora para uma precisão especificada.

Neste caso eu uso o now() função para retornar a data atual e o 'month' argumento modifica essa data para o início do mês. Em seguida, adicionei um mês a isso (o que o leva ao início do mês seguinte) e subtraí um dia dessa data para nos dar o final do mês anterior (que é o final do mês atual).

Podemos convertê-lo em um valor de data, se necessário:
SELECT (date_trunc('month', now()) + interval '1 month - 1 day')::date;

Resultado:
2022-04-30

Aqui está novamente, junto com a data real em que executei o exemplo:
SELECT 
    now()::date AS "Current Date",
    (date_trunc('month', now()) + interval '1 month - 1 day')::date AS "End of Month";

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

Fim de um mês especificado


Não precisa ser o final do mês atual. Podemos especificar qualquer data e retornará o final do mês, com base nessa data.

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

Resultado:
2030-07-31

Exemplo de banco de dados


Aqui está um exemplo que usa datas de um banco de dados:
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;

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