V MariaDB, TIMESTAMPDIFF()
je vestavěná funkce data a času, která vrací rozdíl mezi dvěma výrazy data nebo datetime.
Syntaxe
Syntaxe vypadá takto:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Kde unit
je jedna z následujících hodnot:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
Jednotky mohou mít volitelně předponu SQL_TSI_
.
TIMESTAMPDIFF()
vrátí datetime_expr2
– datetime_expr1
.
Jeden výraz může být datum a druhý datum a čas. Hodnoty data jsou považovány za hodnoty s časovou částí 00:00:00
kde je to nutné.
Příklad
Zde je příklad k demonstraci:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Výsledek:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Negativní výsledek
Změna dat poskytuje negativní výsledek:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Výsledek:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Hodnoty data a času
Zde je příklad předání hodnoty datetime:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Výsledek:
+--------+ | Result | +--------+ | 12 | +--------+
Zadal jsem HOUR
, a tak ignoruje část minut a sekund.
Smíšené typy
Zde je příklad předání hodnoty data i data a času:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Výsledek:
+--------+ | Result | +--------+ | 12 | +--------+
Jak již bylo zmíněno, s hodnotami data se zachází jako s časovou částí 00:00:00
.
Přidání SQL_TSI_
Předpona
Jednotka může obsahovat SQL_TSI_
prefix, pokud je požadován:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Výsledek:
+--------+ | Result | +--------+ | 5 | +--------+
Mikrosekundy
Zde je příklad, který vrací mikrosekundy:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Výsledek:
+--------+ | Result | +--------+ | 123456 | +--------+
Zde je jeden, kde mikrosekundy ve skutečnosti nejsou uvedeny v hodnotách datetime:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Výsledek:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Aktuální datum
Můžeme předat NOW()
jeden z argumentů datetime, aby bylo možné porovnat aktuální datum a čas s jiným datem:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Výsledek:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Neplatná data
Pokud je jedno z dat null
, výsledkem je null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Výsledek:
+--------+ | Result | +--------+ | NULL | +--------+
Chybí argument
Volání TIMESTAMPDIFF()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:
SELECT TIMESTAMPDIFF();
Výsledek:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
A další příklad:
SELECT TIMESTAMPDIFF('2020-12-09');
Výsledek:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '10, '2020-12-09')' at line 1