› Fóruns › SQL e PL/SQL › Calculo entre horas centesimal › Calculo entre horas centesimal
Dá pra fazer usando case também, com a função to_date e mais alguns cálculos:
WITH TABELA AS (
SELECT '23:00' HR_SAIDA,'15:00' HR_ENTRADA FROM DUAL
UNION ALL
SELECT '08:00','07:00' FROM DUAL
UNION ALL
SELECT '07:00','23:00' FROM DUAL
UNION ALL
SELECT '07:00','07:00' FROM DUAL)
SELECT HR_SAIDA, HR_ENTRADA,
CASE
WHEN TO_DATE(HR_SAIDA,'HH24:MI') >= TO_DATE(HR_ENTRADA,'HH24:MI')
THEN (TO_DATE(HR_SAIDA,'HH24:MI')-TO_DATE(HR_ENTRADA,'HH24:MI'))24
ELSE
(TRUNC(TO_DATE(HR_ENTRADA,'HH24:MI'),'MONTH')+1-TO_DATE(HR_ENTRADA,'HH24:MI')
+(TO_DATE(HR_SAIDA,'HH24:MI')-TRUNC(TO_DATE(HR_ENTRADA,'HH24:MI'),'MONTH')))24
END TOTAL
FROM TABELA;
HR_SAIDA HR_ENTRADA TOTAL
--------|----------|----------------------
23:00 15:00 8
08:00 07:00 1
07:00 23:00 8
07:00 07:00 0