sql >> Databáze >  >> RDS >> MariaDB

Jak SUBDATE() funguje v MariaDB

V MariaDB, SUBDATE() je vestavěná funkce data a času, která odečítá částku od daného data.

Umožňuje vám změnit datum zadáním data, jednotky k odečtení a částky k odečtení. Chcete-li přidat, můžete předat zápornou částku k datu, namísto odečítání od něj.

SUBDATE() má také zkratkovou syntaxi, která vám umožňuje určit dny, které se mají odečíst.

Syntaxe

SUBDATE() funkce má dvě syntaxe.

Syntaxe 1:

SUBDATE(expr,days) 

Kde expr je datum a days je počet dní, které se mají odečíst.

Syntaxe 2:

SUBDATE(date,INTERVAL expr unit) 

Kde date je datum změny, expr je částka, která se má odečíst, a unit je jednotka data/času, která se má odečíst (např. sekunda, minuta atd.).

Při použití této syntaxe SUBDATE() je synonymem pro DATE_SUB() .

Příklad – Syntaxe 1

Zde je příklad použití první syntaxe:

SELECT SUBDATE('2021-05-01', 1); 

Výsledek:

+--------------------------+| SUBDATE('2021-05-01', 1) |+--------------------------+| 2021-04-30 |+--------------------------+

V případě potřeby můžeme zahrnout i časovou část:

SELECT SUBDATE('2021-05-01 10:00:00', 1); 

Výsledek:

+-----------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+-------------------------------- ----+| 2021-04-30 10:00:00 |+-----------------------------------+ 

Zde jsou dva alternativní způsoby, jak udělat stejnou věc:

SELECT 
    DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1",
    '2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2"; 

Výsledek:

+---------------------+---------------------+| Výsledek 1 | Výsledek 2 |+---------------------+---------------------+| 2021-04-30 10:00:00 | 2021-04-30 10:00:00 |+---------------------+----------------- -----+

Příklad – Syntaxe 2

Zde je příklad použití druhé syntaxe:

SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR); 

Výsledek:

+---------------------------------------------- ---+| SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HODINA) |+------------------------------ ---------------------+| 2021-05-31 09:00:00 |+--------------------------------------- -----------+

Tato syntaxe nám umožňuje odečítat další jednotky od data (tedy nejen dny). Zde jsem od data odečetl hodinu, ale stejně tak jsem mohl odečíst minuty, sekundy, měsíce, dny, roky atd. Příklady později.

Zde jsou dvě alternativní metody, jak dosáhnout stejného výsledku jako výše uvedený příklad:

SELECT 
    DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1",
    '2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2"; 

Výsledek:

+---------------------+---------------------+| Výsledek 1 | Výsledek 2 |+---------------------+---------------------+| 2021-05-31 09:00:00 | 2021-05-31 09:00:00 |+---------------------+----------------- -----+

Záporné intervaly

Poskytnutí záporného intervalu přidá tato částka k datu.

Příklad:

SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR); 

Výsledek:

+---------------------------------------------- ----+| SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HODINA) |+----------------------------- -----------------------+| 2021-05-31 11:00:00 |+--------------------------------------- ------------+

Další jednotky

Zde je příklad, který odečítá interval 1 od různých jednotek data a času:

SELECT 
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND,
    SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND; 

Výsledek (při použití vertikálního výstupu):

 ROK:2020-05-01 10:00:00 MĚSÍC:2021-04-01 10:00:00 DEN:2021-04-30 10:00:00 HOD:2021-05-01 09:00:00 MINUTA:2021-05-01 09:59:00 DRUHÁ:2021-05-01 09:59:59MIKROSECOND:2021-05-01 09:59:59,999999

Složené jednotky

Zde je příklad použití složených jednotek:

SELECT 
    SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
    SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
    SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE"; 

Výsledek:

+---------------------+----------------------+-- --------------------+| ROK_MĚSÍC | HOUR_SECOND | DAY_MINUTE |+---------------------+---------------------+--- ------------------+| 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 |+---------------------+----------------- -----+---------------------+

Neplatná data

Předávání null pro datum vrátí null :

SELECT SUBDATE(null, INTERVAL 1 YEAR); 

Výsledek:

+--------------------------------+| SUBDATE(null, INTERVAL 1 Year) |+--------------------------------+| NULL |+--------------------------------+

Chybí argument

Volání SUBDATE() s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT SUBDATE(); 

Výsledek:

ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1

  1. Jak nejlépe získat něčí „hodnost“ z tabulky skóre pomocí php a mysql bez zacyklení

  2. Lepší ALTER než DROP

  3. Ukládání do mezipaměti v PostgreSQL

  4. Aktualizujte data aktivity ze služby, když je pozastavena