- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 11 meses atrás por
DENISBA.
-
AutorPosts
-
20 de janeiro de 2011 às 6:38 pm #97865
DENISBA
ParticipanteOlá 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 = 360Desde já eu agradeço a ajuda!
20 de janeiro de 2011 às 7:19 pm #97870Ishii
ParticipanteOlá,
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 = 360Se não forem coloque a conversão to_date primeiro para eles.
[]s Ishii
20 de janeiro de 2011 às 7:39 pm #97871DENISBA
ParticipanteIshii,
Muito obrigado pela ajuda. Funcionou corretamente!!
Abraço,
-
AutorPosts
- Você deve fazer login para responder a este tópico.