› Fóruns › SQL e PL/SQL › Calculo entre horas centesimal › Calculo entre horas centesimal
Olá,
Leo, se você tiver como adicionar a data para que esteja no formato do Oracle dd-mon-yyyy hh24:mi:ss ou outra parecida. Então você poderá usar o
extract hour day to second…
Um exemplo vale mais que mil explicações:
create table TIME_SHEET_TEST
(
ID_TM NUMBER,
ENTRADA DATE,
SAIDA DATE,
INTERVALO NUMBER
);
insert into time_sheet_test
values
(1,to_date('06-jul-2010 22:00:00','dd-mon-yyyy hh24:mi:ss'), to_date('07-jul-2010 07:00:00','dd-mon-yyyy hh24:mi:ss'), null);
Então o uso do extract
select t.entrada, t.saida, extract(hour from (t.saida - t.entrada) day to second) intervalo,
extract(minute from (t.saida - t.entrada) day to second) intervalo_min,
round(extract(minute from (t.saida - t.entrada) day to second)/60,2) intervalo_min_ajus
from time_sheet_test t
Note que a primeira coluna intervalo sempre vai trazer a quantidade em horas e a segunda em minutos, para ajustar utilize a lógica da terceira coluna (afinal 30 minutos é 0,5 hora).
A lógica vale para triggers também.
create or replace trigger TR_E_B_TIMESHEET
before insert or update on time_sheet_test
for each row
-- Trigger de calculo de intervalo
begin
:new.intervalo := extract(hour from (:new.saida - :new.entrada) day to second) + round(extract(minute from (:new.saida - :new.entrada) day to second)/60,2);
end TR_E_B_TIMESHEET;
Boa sorte!!!
[]s Ishii