Oracle: Recuperando diferença (em horas) entre duas datas.

Este post mostra como conseguir a diferença em horas entre dois valores datetime. O resultado será um número do gênero 2,5 (ou duas horas e meia).

A consulta abaixo retornará a diferença:

select
    24 * (sysdate - to_date('2017-01-31 20:00', 'YYYY-MM-DD hh24:mi')) as diff_hours
from dual;

O resultado desta consulta, no dia em que estou fazendo este post, será 7044.200555555555555555555555555555555544. Isso significa que já passaram 7044 horas (e uns quebrados) desde 31/01/2017 as 20:00.

O resultado está correto, mas está feio. Dificilmente o usuário vai querer (ou entender) um número desta forma. Então podemos formatar o resultado, utilizando a função ROUND(m, n), onde m é o valor para arredondar e n é o número de casas decimais:

select
    ROUND(24 * (sysdate - to_date('2017-01-31 20:00', 'YYYY-MM-DD hh24:mi')), 1) as diff_hours
from dual;

Com a utilização da função ROUND, arredondamos o resultado para 1 casa decimal, fazendo com que o número final seja 7044.2. Algo bem mais apresentável que o número anterior.

Se você colocar uma data futura no lugar de ‘2017-01-31 20:00’,  o resultado será um número negativo.

 

Extra: Dica para quem usa PowerBuilder! Você não precisa utilizar a função TO_DATE(d, f). O próprio PB vai formatar a data da forma correta. Se você insistir em utilizar esta função, vai influenciar o resultado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Banco de Dados, Dev and tagged , , .