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

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

Overview

Bem-vindo ao nosso guia rápido sobre como calcular diferenças de horas entre datas no SQL! Se você já se deparou com números gigantescos e confusos ao tentar entender quanto tempo passou entre dois momentos, este post é para você. Vamos descomplicar esse processo, mostrando um método simples e eficaz para obter resultados limpos e compreensíveis. Prepare-se para aprender um truque valioso que vai ajudar não só a economizar seu tempo mas também a manter sua sanidade ao trabalhar com 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.