Možná jste si všimli, že MySQL má TIMEDIFF()
funkce a SUBTIME()
funkce. A možná jste si všimli, že v mnoha případech oba vrátí stejný výsledek. Možná se tedy ptáte, jaký je rozdíl mezi těmito dvěma funkcemi?
Pojďme to zjistit.
Syntaxe
Nejprve se podívejme na syntaxi každé funkce.
SUBTIME()
SUBTIME(expr1,expr2)
Kde expr1
je výraz čas nebo datum a čas a expr2
je časový výraz.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Kde expr1
a expr2
jsou výrazy času nebo data a času, ale oba musí být stejného typu.
Rozdíl
Takže tady je rozdíl:
- Při použití
SUBTIME()
, druhý argument musí být časový výraz . - Při použití
TIMEDIFF()
druhým argumentem může být výraz čas nebo datum a čas, ale v obou případech musí být stejného typu jako první výraz .
Příklad 1 – Oba argumenty jsou „časové“ hodnoty
Zde je srovnání obou funkcí, kde oba argumenty jsou časové hodnoty.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Výsledek:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Podle očekávání obě funkce vrátí stejný výsledek.
Příklad 2 – Oba argumenty jsou hodnoty „datetime“
Zde je srovnání obou funkcí, kde oba argumenty jsou hodnoty data a času.
SELECT TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Výsledek:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
V tomto případě SUBTIME()
vrátil hodnotu null, protože jeho druhý argument nebyl hodnotou času (byla to hodnota datetime).
Příklad 3 – První argument je „datetime“, druhý je „čas“
Zde je prvním argumentem hodnota datetime. Druhým argumentem je časová hodnota.
SELECT TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';
Výsledek:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
V tomto případě TIMEDIFF()
vrátil hodnotu null, protože oba argumenty byly jiného typu.
Příklad 4 – První argument je „čas“, druhý je „datetime“
A tady si to vyměníme. První argument je časová hodnota. Druhým argumentem je hodnota datetime.
SELECT TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Výsledek:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
V tomto případě:
TIMEDIFF()
vrátila hodnotu null, protože oba argumenty byly jiného typu.SUBTIME()
vrátil hodnotu null, protože akceptuje pouze časovou hodnotu pro svůj druhý argument.