En MariaDB, TIMEDIFF()
es una función de fecha y hora integrada que devuelve la diferencia entre dos valores de hora o valores de fecha y hora, expresados como un valor de hora.
Es similar al DATEDIFF()
función, excepto que DATEDIFF()
El valor de retorno se expresa en días.
TIMEDIFF()
acepta dos argumentos, los cuales son expresiones de hora o de fecha y hora. Luego resta la segunda vez de la primera.
Sintaxis
La sintaxis es así:
TIMEDIFF(expr1,expr2)
Luego devuelve expr1 - expr2
.
Ejemplo
He aquí un ejemplo:
SELECT TIMEDIFF('10:30:17', '1:10:10');
Resultado:
+---------------------------------+ | TIMEDIFF('10:30:17', '1:10:10') | +---------------------------------+ | 09:20:07 | +---------------------------------+
Aquí está de nuevo, pero con los valores de tiempo intercambiados:
SELECT TIMEDIFF('1:10:10', '10:30:17');
Resultado:
+---------------------------------+ | TIMEDIFF('1:10:10', '10:30:17') | +---------------------------------+ | -09:20:07 | +---------------------------------+
Valores de fecha y hora
Aquí hay un ejemplo que usa valores de fecha y hora:
SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59');
Resultado:
+--------------------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') | +--------------------------------------------------------+ | 96:00:01 | +--------------------------------------------------------+
Tipos de valores mixtos
Mientras que TIMEDIFF()
funciona tanto en valores de hora como de fecha y hora, ambos argumentos deben ser del mismo tipo. Mezclar tipos da como resultado null
.
Ejemplo:
SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');
Resultado:
+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') | +---------------------------------------------+ | NULL | +---------------------------------------------+
Fuera de rango
El rango de valores de tiempo es '-838:59:59.999999'
a '838:59:59.999999'
. Si el resultado está fuera de ese rango, el valor devuelto es el límite superior de su rango relevante y se devuelve una advertencia.
Ejemplo:
SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59');
Resultado:
+--------------------------------------------------------+ | 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)
Echemos un vistazo a la advertencia:
SHOW WARNINGS;
Resultado:
+---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '87624:00:01' | +---------+------+-----------------------------------------------+
Fecha actual
Aquí, pasamos NOW()
como segundo argumento:
SELECT
NOW(),
TIMEDIFF('2021-05-27 10:00:00', NOW());
Resultado:
+---------------------+----------------------------------------+ | NOW() | TIMEDIFF('2021-05-27 10:00:00', NOW()) | +---------------------+----------------------------------------+ | 2021-05-27 14:29:38 | -04:29:38 | +---------------------+----------------------------------------+
Argumentos no válidos
Cuando se pasan argumentos no válidos, TIMEEDIFF()
devuelve null
:
SELECT TIMEDIFF('Homer', 'Simpson');
Resultado:
+------------------------------+ | TIMEDIFF('Homer', 'Simpson') | +------------------------------+ | NULL | +------------------------------+
Argumento faltante
Llamando a TIMEDIFF()
el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:
SELECT TIMEDIFF();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'
Y:
SELECT TIMEDIFF('2030-05-21');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'