Być może zauważyłeś, że MySQL ma funkcję TIMEDIFF()
funkcja i SUBTIME()
funkcjonować. Być może zauważyłeś, że w wielu przypadkach obie zwracają ten sam wynik. Być może zastanawiasz się, jaka jest różnica między tymi dwiema funkcjami?
Dowiedzmy się.
Składnia
Najpierw spójrzmy na składnię każdej funkcji.
SUBTIME()
SUBTIME(expr1,expr2)
Gdzie expr1
jest wyrażeniem czasu lub daty i godziny, a expr2
jest wyrażeniem czasu.
RÓŻNICA CZASOWA()
TIMEDIFF(expr1,expr2)
Gdzie expr1
i expr2
są wyrażeniami czasu lub daty i czasu, ale oba muszą być tego samego typu.
Różnica
Oto różnica:
- Gdy używasz
SUBTIME()
, drugi argument musi być wyrażeniem czasowym . - Gdy używasz
TIMEDIFF()
drugi argument może być wyrażeniem godziny lub daty i godziny, ale w każdym przypadku musi być tego samego typu co pierwsze wyrażenie .
Przykład 1 – Oba argumenty są wartościami „czasu”
Oto porównanie obu funkcji, gdzie oba argumenty są wartościami czasu.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Wynik:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Zgodnie z oczekiwaniami obie funkcje zwracają ten sam wynik.
Przykład 2 – Oba argumenty są wartościami „data-godzina”
Oto porównanie obu funkcji, gdzie oba argumenty są wartościami daty i godziny.
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';
Wynik:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
W tym przypadku SUBTIME()
zwrócił wartość null, ponieważ jej drugi argument nie był wartością czasu (była wartością daty i czasu).
Przykład 3 – Pierwszy argument to „data-godzina”, drugi to „godzina”
Tutaj pierwszym argumentem jest wartość daty i godziny. Drugi argument to wartość czasu.
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';
Wynik:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
W tym przypadku TIMEDIFF()
zwrócił wartość null, ponieważ oba argumenty były innego typu.
Przykład 4 – Pierwszy argument to „czas”, drugi to „data-godzina”
A tutaj zamieniamy to. Pierwszy argument to wartość czasu. Drugi argument to wartość daty i godziny.
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';
Wynik:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
W takim przypadku:
TIMEDIFF()
zwrócił wartość null, ponieważ oba argumenty były innego typu.SUBTIME()
zwrócił wartość null, ponieważ jako drugi argument przyjmuje tylko wartość czasu.