Es posible que haya notado que MySQL tiene un TIMEDIFF()
función y un SUBTIME()
función. Y es posible que haya notado que, en muchos casos, ambos devuelven el mismo resultado. Entonces, quizás se pregunte cuál es la diferencia entre estas dos funciones.
Vamos a averiguarlo.
Sintaxis
Primero veamos la sintaxis de cada función.
SUBTIME()
SUBTIME(expr1,expr2)
Donde expr1
es una expresión de hora o fecha y hora, y expr2
es una expresión de tiempo.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Donde expr1
y expr2
son expresiones de hora o de fecha y hora, pero ambas deben ser del mismo tipo.
La diferencia
Así que aquí está la diferencia:
- Al usar
SUBTIME()
, el segundo argumento debe ser una expresión de tiempo . - Al usar
TIMEDIFF()
el segundo argumento puede ser una expresión de hora o de fecha y hora, pero en cualquier caso, debe ser del mismo tipo que la primera expresión .
Ejemplo 1:ambos argumentos son valores de "tiempo"
Aquí hay una comparación de ambas funciones, donde ambos argumentos son valores de tiempo.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Resultado:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Como era de esperar, ambas funciones devuelven el mismo resultado.
Ejemplo 2:ambos argumentos son valores de 'fecha y hora'
Aquí hay una comparación de ambas funciones, donde ambos argumentos son valores de fecha y hora.
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';
Resultado:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
En este caso, SUBTIME()
devolvió un valor nulo porque su segundo argumento no era un valor de hora (era un valor de fecha y hora).
Ejemplo 3:el primer argumento es 'fechahora', el segundo es 'hora'
Aquí, el primer argumento es un valor de fecha y hora. El segundo argumento es un valor de tiempo.
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';
Resultado:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
En este caso, TIMEDIFF()
devolvió un valor nulo porque ambos argumentos eran de un tipo diferente.
Ejemplo 4:el primer argumento es 'hora', el segundo es 'fechahora'
Y aquí, lo intercambiamos. El primer argumento es un valor de tiempo. El segundo argumento es un valor de fecha y hora.
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';
Resultado:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
En este caso:
TIMEDIFF()
devolvió un valor nulo porque ambos argumentos eran de un tipo diferente.SUBTIME()
devolvió un valor nulo porque solo acepta un valor de tiempo para su segundo argumento.