K vrácení prvního dne daného měsíce můžeme v PostgreSQL použít následující metodu.
Může to být první den aktuálního měsíce nebo první den měsíce podle data, které určíme.
Získání prvního dne v měsíci nám umožňuje provádět další výpočty k výslednému datu, jako je přidání určitého počtu dní k začátku měsíce atd.
Začátek aktuálního měsíce
Zde je příklad, který vrací první den aktuálního měsíce:
SELECT date_trunc('month', now());
Výsledek:
2022-04-01 00:00:00+10
Toto používá PostgreSQL date_trunc()
funkci vrátit 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.
V případě potřeby jej můžeme přetypovat na hodnotu data:
SELECT date_trunc('month', now())::date;
Výsledek:
2022-04-01
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())::date AS "Start of Month";
Výsledek:
+--------------+----------------+ | Current Date | Start of Month | +--------------+----------------+ | 2022-04-09 | 2022-04-01 | +--------------+----------------+
Začátek určeného měsíce
Nemusí to být začátek aktuálního měsíce. Můžeme zadat libovolné datum a vrátí začátek měsíce na základě tohoto data.
Příklad:
SELECT date_trunc('month', date '2030-07-14')::date;
Výsledek:
2030-07-01
Výsledek pak můžeme použít k provádění dalších akcí na něm. Například můžeme k výsledku přidat daný počet dní takto:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Výsledek:
2030-07-21
Příklad databáze
Zde je příklad, který používá data z databáze:
SELECT
rental_date,
date_trunc('month', rental_date)::date AS "The 1st of the Month",
date_trunc('month', rental_date)::date + 19 AS "The 20th of the Month"
FROM rental WHERE customer_id = 459 LIMIT 10;
Výsledek:
+---------------------+----------------------+-----------------------+ | rental_date | The 1st of the Month | The 20th of the Month | +---------------------+----------------------+-----------------------+ | 2005-05-24 22:54:33 | 2005-05-01 | 2005-05-20 | | 2005-06-17 02:50:51 | 2005-06-01 | 2005-06-20 | | 2005-06-17 09:38:22 | 2005-06-01 | 2005-06-20 | | 2005-06-17 16:40:33 | 2005-06-01 | 2005-06-20 | | 2005-06-20 02:39:21 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:35:44 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:42:00 | 2005-06-01 | 2005-06-20 | | 2005-06-21 02:39:44 | 2005-06-01 | 2005-06-20 | | 2005-07-06 00:22:29 | 2005-07-01 | 2005-07-20 | | 2005-07-08 02:51:23 | 2005-07-01 | 2005-07-20 | +---------------------+----------------------+-----------------------+