Pular para o conteúdo

Fóruns SQL e PL/SQL Calculo entre horas centesimal Calculo entre horas centesimal

#94970
Ishii
Participante

    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