W MariaDB, TIMEDIFF()
to wbudowana funkcja daty i czasu, która zwraca różnicę między dwiema wartościami czasu lub wartości daty i godziny, wyrażoną jako wartość czasu.
Jest podobny do DATEDIFF()
funkcji, z wyjątkiem tego, że DATEDIFF()
Zwracana wartość jest wyrażona w dniach.
TIMEDIFF()
akceptuje dwa argumenty, z których oba są wyrażeniami czasu lub daty i godziny. Następnie odejmuje drugi czas od pierwszego.
Składnia
Składnia wygląda tak:
TIMEDIFF(expr1,expr2)
Następnie zwraca expr1 - expr2
.
Przykład
Oto przykład:
SELECT TIMEDIFF('10:30:17', '1:10:10');
Wynik:
+---------------------------------+ | TIMEDIFF('10:30:17', '1:10:10') | +---------------------------------+ | 09:20:07 | +---------------------------------+
Oto znowu, ale z zamienionymi wartościami czasu:
SELECT TIMEDIFF('1:10:10', '10:30:17');
Wynik:
+---------------------------------+ | TIMEDIFF('1:10:10', '10:30:17') | +---------------------------------+ | -09:20:07 | +---------------------------------+
Wartości daty i godziny
Oto przykład wykorzystujący wartości daty i godziny:
SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59');
Wynik:
+--------------------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') | +--------------------------------------------------------+ | 96:00:01 | +--------------------------------------------------------+
Różne typy wartości
Podczas gdy TIMEDIFF()
działa zarówno na wartościach czasu, jak i daty i godziny, oba argumenty muszą być tego samego typu. Mieszanie typów daje w wyniku null
.
Przykład:
SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');
Wynik:
+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') | +---------------------------------------------+ | NULL | +---------------------------------------------+
Poza zasięgiem
Zakres wartości czasu to '-838:59:59.999999'
do '838:59:59.999999'
. Jeśli wynik znajduje się poza tym zakresem, zwracana wartość jest górną granicą odpowiedniego zakresu i zwracane jest ostrzeżenie.
Przykład:
SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59');
Wynik:
+--------------------------------------------------------+ | TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59') | +--------------------------------------------------------+ | 838:59:59 | +--------------------------------------------------------+ 1 row in set, 1 warning (0.003 sec)
Rzućmy okiem na ostrzeżenie:
SHOW WARNINGS;
Wynik:
+---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '87624:00:01' | +---------+------+-----------------------------------------------+
Aktualna data
Tutaj przekazujemy NOW()
jako drugi argument:
SELECT
NOW(),
TIMEDIFF('2021-05-27 10:00:00', NOW());
Wynik:
+---------------------+----------------------------------------+ | NOW() | TIMEDIFF('2021-05-27 10:00:00', NOW()) | +---------------------+----------------------------------------+ | 2021-05-27 14:29:38 | -04:29:38 | +---------------------+----------------------------------------+
Nieprawidłowe argumenty
Po przekazaniu jakichkolwiek nieprawidłowych argumentów, TIMEEDIFF()
zwraca null
:
SELECT TIMEDIFF('Homer', 'Simpson');
Wynik:
+------------------------------+ | TIMEDIFF('Homer', 'Simpson') | +------------------------------+ | NULL | +------------------------------+
Brakujący argument
Wywołanie TIMEDIFF()
zła liczba argumentów lub bez przekazywania żadnych argumentów skutkuje błędem:
SELECT TIMEDIFF();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'
Oraz:
SELECT TIMEDIFF('2030-05-21');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'