Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() no MySQL:Qual é a diferença?


Você deve ter notado que o MySQL tem um TIMEDIFF() função e um SUBTIME() função. E você deve ter notado que, em muitos casos, ambos retornam o mesmo resultado. Então você pode estar se perguntando qual é a diferença entre essas duas funções?

Vamos descobrir.


Sintaxe


Primeiro vamos ver a sintaxe de cada função.

SUBTIME()
SUBTIME(expr1,expr2)

Onde expr1 é uma expressão de hora ou data e hora e expr2 é uma expressão de tempo.

TIMEDIFF()
TIMEDIFF(expr1,expr2)

Onde expr1 e expr2 são expressões de hora ou data e hora, mas ambas devem ser do mesmo tipo.

A diferença


Então aqui está a diferença:
  • Ao usar SUBTIME() , o segundo argumento deve ser uma expressão de tempo .
  • Ao usar TIMEDIFF() o segundo argumento pode ser uma expressão de hora ou data e hora, mas em ambos os casos, deve ser do mesmo tipo que a primeira expressão .

Exemplo 1 - Ambos os argumentos são valores de 'tempo'


Aqui está uma comparação de ambas as funções, onde ambos os argumentos são valores de tempo.
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 esperado, ambas as funções retornam o mesmo resultado.

Exemplo 2 - Ambos os argumentos são valores 'datetime'


Aqui está uma comparação de ambas as funções, onde ambos os argumentos são valores de data e 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    |
+-----------+---------+

Neste caso, SUBTIME() retornou um valor nulo porque seu segundo argumento não era um valor de hora (era um valor de data e hora).

Exemplo 3 – O primeiro argumento é 'datetime', o segundo é 'time'


Aqui, o primeiro argumento é um valor de data e hora. O segundo argumento é um valor de tempo.
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 |
+----------+---------------------+

Neste caso, TIMEDIFF() retornou um valor nulo porque ambos os argumentos eram de um tipo diferente.

Exemplo 4 – O primeiro argumento é 'time', o segundo é 'datetime'


E aqui nós trocamos. O primeiro argumento é um valor de tempo. O segundo argumento é um valor de data e 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    |
+----------+---------+

Nesse caso:
  • TIMEDIFF() retornou um valor nulo porque ambos os argumentos eram de um tipo diferente.
    SUBTIME() retornou um valor nulo porque só aceita um valor de tempo para seu segundo argumento.