Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #97865
    DENISBA
    Participante

      Olá a todos!!

      Estou tentando fazer um calculo entre datas de duas tabelas e necessito retornar o resultado no formato xx dias xx horas xxminutos. Para isso, estou executando o select abaixo mas não está retornando o resultado correto. Vocês saberiam me informar o que estou fazendo de errado ou se existe uma opção melhor para esta tarefa?

      Segue:

      select
      tbpmpro1.NCODRIN as Contrato,
      tbpmpro1.NNUMPRO as Processo,
      tbpmpro1.XDEHREC as Recepcao,
      tbpmcrp1.XDEHRET as Retirada,
      round(to_number(to_date(tbpmcrp1.XDEHRET, ‘DD/MM/RR HH24:MI:SS’) – to_date(tbpmpro1.XDEHREC, ‘DD/MM/RR HH24:MI:SS’))) ||’ Dias ‘ ||
      round(to_number(to_date(tbpmcrp1.XDEHRET, ‘DD/MM/RR HH24:MI:SS’) – to_date(tbpmpro1.XDEHREC, ‘DD/MM/RR HH24:MI:SS’))) * 24 ||’ Horas ‘ ||
      round(to_number(to_date(tbpmcrp1.XDEHRET, ‘DD/MM/RR HH24:MI:SS’) – to_date(tbpmpro1.XDEHREC, ‘DD/MM/RR HH24:MI:SS’))) * 1440 ||’ Minutos ‘
      as Diferenca
      from
      oraims.tbpmpro1 left join oraims.tbpmcrp1 on
      tbpmpro1.XDATPRO = tbpmcrp1.XDATPRO and
      tbpmpro1.NNUMPRO = tbpmcrp1.NNUMPRO
      where
      to_char (tbpmpro1.XDATPRO, ‘dd/mm/yyyy’) = ’14/01/2011′
      and tbpmpro1.NNUMPRO = 360

      Desde já eu agradeço a ajuda!

      #97870
      Ishii
      Participante

        Olá,

        Lembrando que se o seu campo já for tipo Date pode-se apenas usar a conversão e depois o cálculo. Por exemplo:

        select last_day(sysdate) - sysdate dias,
        to_number(to_char(sysdate, 'HH24')) - to_number(to_char(last_day(trunc(sysdate)), 'HH24')) horas,
        to_number(to_char(sysdate, 'MI')) - to_number(to_char(last_day(trunc(sysdate)), 'MI')) minutos,
        to_number(to_char(sysdate, 'SS')) - to_number(to_char(last_day(trunc(sysdate)), 'SS')) segundos
        from dual;

        Isso retorna algo assim:


        DIAS HORAS MINUTOS SEGUNDOS
        11 13 13 48

        Se os campos bpmcrp1.XDEHRET e tbpmpro1.XDEHREC forem do tipo Date o SQL deve ficar assim:

        select
        tbpmpro1.NCODRIN as Contrato,
        tbpmpro1.NNUMPRO as Processo,
        tbpmpro1.XDEHREC as Recepcao,
        tbpmcrp1.XDEHRET as Retirada,
        tbpmcrp1.XDEHRET- tbpmpro1.XDEHREC ||' Dias ' ||
        to_number(to_char(tbpmcrp1.XDEHRET, 'HH24') - to_number (to_char(tbpmpro1.XDEHREC, 'HH24')))||' Horas ' ||
        to_number(to_char(tbpmcrp1.XDEHRET, 'MI') - to_number (to_char(tbpmpro1.XDEHREC, 'MI'))) ||' Minutos '
        as Diferenca
        from
        oraims.tbpmpro1 left join oraims.tbpmcrp1 on
        tbpmpro1.XDATPRO = tbpmcrp1.XDATPRO and
        tbpmpro1.NNUMPRO = tbpmcrp1.NNUMPRO
        where
        to_char (tbpmpro1.XDATPRO, 'dd/mm/yyyy') = '14/01/2011'
        and tbpmpro1.NNUMPRO = 360

        Se não forem coloque a conversão to_date primeiro para eles.

        []s Ishii

        #97871
        DENISBA
        Participante

          Ishii,

          Muito obrigado pela ajuda. Funcionou corretamente!!

          Abraço,

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.