sql >> Databáze >  >> RDS >> PostgreSQL

Získejte poslední den v měsíci v PostgreSQL

K vrácení posledního dne daného měsíce můžeme v PostgreSQL použít následující techniku.

Může to být poslední den aktuálního měsíce nebo poslední den v měsíci na základě data, které určíme.

Konec aktuálního měsíce

Zde je příklad, který vrací poslední den aktuálního měsíce:

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

Výsledek:

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

Toto používá PostgreSQL date_trunc() funkce, spolu s nějakou aritmetikou data, abychom vrátili výsledky, které chceme. Tato funkce zkrátí hodnotu data/času na zadanou přesnost.

V tomto případě používám now() funkce vrátí aktuální datum a 'month' argument upraví toto datum na začátek měsíce. Potom jsem k tomu přidal jeden měsíc (čímž se přesune na začátek následujícího měsíce), poté jsem od tohoto data odečetl jeden den, abychom dostali konec předchozího měsíce (což je konec aktuálního měsíce).

V případě potřeby jej můžeme přetypovat na hodnotu data:

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

Výsledek:

2022-04-30

Tady je to znovu, spolu se skutečným datem, kdy jsem spustil příklad:

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

Výsledek:

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

Konec určeného měsíce

Nemusí to být konec aktuálního měsíce. Můžeme zadat libovolné datum a vrátí se konec měsíce na základě tohoto data.

Příklad:

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

Výsledek:

2030-07-31

Příklad databáze

Zde je příklad, který používá data z databáze:

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;

Výsledek:

+---------------------+--------------+
|     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. Dotaz k prohledání všech balíčků na tabulku a/nebo sloupec

  2. Existuje nějaký způsob, jak zkontrolovat výkon indexování mysql

  3. Převeďte název měsíce na číslo měsíce v SQL Server

  4. Transakce Codeigniter