sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona TIMEDIFF() en MariaDB

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'