sql >> Database >  >> RDS >> PostgreSQL

Ontvang de laatste dag van de maand in PostgreSQL

We kunnen de volgende techniek in PostgreSQL gebruiken om de laatste dag van een bepaalde maand te retourneren.

Dit kan de laatste dag van de huidige maand zijn, of de laatste dag van de maand op basis van een datum die we specificeren.

Einde van de huidige maand

Hier is een voorbeeld dat de laatste dag van de huidige maand retourneert:

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

Resultaat:

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

Dit gebruikt PostgreSQL's date_trunc() functie, samen met een rekenkundige datum om de gewenste resultaten te retourneren. Deze functie kapt een datum/tijd-waarde af tot een gespecificeerde precisie.

In dit geval gebruik ik de now() functie om de huidige datum terug te geven, en de 'month' argument wijzigt die datum naar het begin van de maand. Ik heb daar vervolgens een maand aan toegevoegd (wat het tot het begin van de volgende maand brengt), en vervolgens een dag van die datum afgetrokken om ons het einde van de vorige maand te geven (dat is het einde van de huidige maand).

We kunnen het indien nodig naar een datumwaarde casten:

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

Resultaat:

2022-04-30

Hier is het weer, samen met de werkelijke datum waarop ik het voorbeeld heb uitgevoerd:

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

Resultaat:

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

Einde van een bepaalde maand

Het hoeft niet het einde van de huidige maand te zijn. We kunnen elke datum specificeren, en het zal het einde van de maand retourneren, gebaseerd op die datum.

Voorbeeld:

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

Resultaat:

2030-07-31

Databasevoorbeeld

Hier is een voorbeeld dat datums uit een database gebruikt:

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;

Resultaat:

+---------------------+--------------+
|     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. Datum ophalen in sql-server, CURRENT_TIMESTAMP vs GetDate()

  2. Hoe een gegevenstabel invoegen in de SQL Server-databasetabel?

  3. MariaDB UCASE() uitgelegd

  4. Oracle PLS-00363:uitdrukking '' kan niet worden gebruikt als toewijzingsdoel