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.