Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL Hours Diferença entre datas em HH:MM:SS


Supondo que as colunas já sejam datas e, portanto, a conversão de e para strings que você está fazendo é inútil e que a diferença sempre será menor que um dia, você pode fazer:
to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')

Isso obtém a diferença entre as datas como uma fração de um dia; garante que seja positivo via abs(); e, em seguida, adiciona essa fração de volta a uma data nominal, que tem seu horário como meia-noite. Em seguida, ele converte isso em uma string, olhando apenas para a hora.

Demonstração rápida:
-- CTEs to supply the two date/times
with stp (created_date) as (
  select cast(timestamp '2018-02-26 12:59:21' as date) from dual
),
adhh (created_date) as (
  select cast(timestamp '2018-02-26 12:59:32' as date) from dual
)
select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
from stp cross join adhh;

TO_CHAR(
--------
00:00:11

Se a diferença pode exceder um dia, mas não um ano, você pode alterar o modelo de formato para algo como 'FMDDD FMHH24:MI:SS' , que mostrará dias inteiros no início.