No MariaDB,
TIMEDIFF()
é uma função de data e hora integrada que retorna a diferença entre dois valores de hora ou valores de data e hora, expressos como um valor de hora. É semelhante ao
DATEDIFF()
função, exceto que DATEDIFF()
O valor de retorno é expresso em dias. TIMEDIFF()
aceita dois argumentos, ambos são expressões de hora ou data e hora. Em seguida, subtrai a segunda vez da primeira. Sintaxe
A sintaxe fica assim:
TIMEDIFF(expr1,expr2)
Em seguida, ele retorna
expr1 - expr2
. Exemplo
Aqui está um exemplo:
SELECT TIMEDIFF('10:30:17', '1:10:10');
Resultado:
+---------------------------------+| TIMEDIFF('10:30:17', '1:10:10') |+------------------------------- ---+| 09:20:07 |+------------------------------------------------+
Aqui está novamente, mas com os valores de tempo trocados:
SELECT TIMEDIFF('1:10:10', '10:30:17');
Resultado:
+---------------------------------+| TIMEDIFF('1:10:10', '10:30:17') |+------------------------------- ---+| -09:20:07 |+------------------------------------------------+
Valores de data e hora
Aqui está um exemplo que usa valores de data e 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 mistos
Enquanto
TIMEDIFF()
funciona em valores de hora e data e hora, ambos os argumentos devem ser do mesmo tipo. A mistura de tipos resulta em null
. Exemplo:
SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');
Resultado:
+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') |+------------------------- --------------------+| NULO |+---------------------------------------------+Fora do alcance
O intervalo para valores de tempo é'-838:59:59.999999'
para'838:59:59.999999'
. Se o resultado estiver fora desse intervalo, o valor de retorno será o limite superior de seu intervalo relevante e um aviso será retornado.
Exemplo:
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 linha no conjunto, 1 aviso (0,003 seg)
Vejamos o aviso:
SHOW WARNINGS;
Resultado:
+---------+------+----------------------------- ------------------+| Nível | Código | Mensagem |+---------+------+------------------- ------------------+| Aviso | 1292 | Valor de tempo incorreto truncado:'87624:00:01' |+---------+------+------------------- ----------------------------+Data atual
Aqui, passamosNOW()
como segundo argumento:
SELECT NOW(), TIMEDIFF('2021-05-27 10:00:00', NOW());
Resultado:
+---------------------+------------------------ ----------------+| AGORA() | TIMEDIFF('2021-05-27 10:00:00', AGORA()) |+---------------------+------- ----------------------------------+| 2021-05-27 14:29:38 | -04:29:38 |+---------------------+----------------------- --------------------+Argumentos inválidos
Quando passados argumentos inválidos,TIMEEDIFF()
retornanull
:
SELECT TIMEDIFF('Homer', 'Simpson');
Resultado:
+------------------------------+| TIMEDIFF('Homer', 'Simpson') |+------------------------------+| NULL |+------------------------------+Argumento ausente
ChamandoTIMEDIFF()
o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT TIMEDIFF();
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'TIMEDIFF'
E:
SELECT TIMEDIFF('2030-05-21');
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'TIMEDIFF'