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