sql >> Base de Datos >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() en MySQL:¿Cuál es la diferencia?

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.