Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

metalsonic

Oracle 10 - Calculando Diferença Entre Datas

Recommended Posts

Olá companheiros de programação!

 

Eu estou precisando gerar uma consulta para poder calcular a diferença de tempo entre duas datas, porém dentro do horário 07:00 - 19:00 e sem incluir Fins de Semana.

 

Consegui calcular de maneira bem porca sem incluir os Fins de Semana usando duas Queries separadas:

 

SELECT SUBSTR((CAST(DATAFECHAMENTO AS TIMESTAMP)-CAST(DATAABERTURA AS TIMESTAMP)),12,2) "HORAS",
SUBSTR((CAST(DATAFECHAMENTO AS TIMESTAMP)-CAST(DATAABERTURA AS TIMESTAMP)),15,2) "MINUTOS",
SUBSTR((CAST(DATAFECHAMENTO AS TIMESTAMP)-CAST(DATAABERTURA AS TIMESTAMP)),18,2) "SEGUNDOS"
FROM SACH_CHAMADOS WHERE IDCHAMADO = '*Aqui Entra Uma Variável*' ORDER BY IDCHAMADO DESC;

SELECT count(*) "DIAS" FROM 
(SELECT to_date('*Aqui Entra Uma Data Variável, A Data Inicial*', 'dd-mm-yyyy' ) + ROWNUM - 1 DIAS 
FROM all_objects WHERE ROWNUM < to_date('*Aqui Entra Uma Data Variável, A Data Final*','dd-mm-yyyy') - to_date('*Aqui Entra Uma Data Variável, A Data Inicial*','dd-mm-yyyy') + 1) 
WHERE to_char(DIAS,'d') != '7' AND to_char(DIAS,'d') != '1' 

 

Então eu "monto" o resultado pegando os valores correspondentes de cada Query.

 

Estou usando o ASP como linguagem de programação.

 

Espero que me ajudem, já tentei em vários lugares mas as poucas soluções que eu encontrei não consegui fazer funcionar. Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A diferença vem entre dias (ou suas frações) , multiplicando por 24 temos em horas , por mais 60 temos em minutos e por mais outros 60 temos em segundos, o resto seria só calcular

 

SELECT SYSDATE - To_Date('09-feb-2011 00:00:00','dd/mon/yyyy hh24:mi:ss') FROM dual

SYSDATE-TO_DATE('09-FEB-201100:00:00','DD/MON/YYYYHH24:MI:SS')
.7724189814814814814814814814814814814815


SELECT 24 * 60 * 60 * (SYSDATE - To_Date('09-feb-2011 00:00:00','dd/mon/yyyy hh24:mi:ss')) FROM dual


24*60*60*(SYSDATE-TO_DATE('09-FEB-201100:00:00','DD/MON/YYYYHH24:MI:SS'))
                                                                   66781

 

 

 

 

Uma function ou procedure que retorne estes valores talvez ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue mais um modelo seguindo a idéia do Motta:

 

Select t1.diferenca,
Trunc(mod(t1.diferenca*24, 60)) || ':' || Trunc(mod(t1.diferenca*24*60, 60)) || ':' || Trunc(mod(t1.diferenca*24*60*60, 60)) Tempo
from
(select t0.data_final - t0.data_inicial diferenca
from
(select
to_date('21/11/2010 18:45:10','dd/mm/yyyy hh24:mi:ss') data_inicial,
to_date('22/11/2010 21:30:00','dd/mm/yyyy hh24:mi:ss') data_final
from dual) t0) t1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.