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,999999Slož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