› Fóruns › SQL e PL/SQL › Diferença de Data com horas e minutos › Responder a: Diferença de Data com horas e minutos
É super-bico : o que vc TEM que saber é que quando vc faz a Subtração de duas datas, o Oracle te retorna um NÚMERO cuja parte Inteira é a quantidade de dias E a fração é o quanto de um dia sobrou….
Como o dia tem 24 horas, o cálculo de HORAS é simplesmente pegar a parte INTEIRA desse cálculo e multiplicar por 24, que são as 24 horas do dia…
Já o cálculo de MINUTOS é repetir o cálculo de Horas (com a variação de que PODE ou não haver a porção inteira) e multiplicar por 60, a quantidade de horas vezes 60 dá os minutos….
Como Exemplo, vamos ter uma massa de dados onde há intervalos com menos de um dia, com mais de um dias, com mais de dois dias, com minutos fracionados e sem minutos fracionados :
scott@DESENV:SQL>create table T(start_date date, end_date date);
Tabela criada.
scott@DESENV:SQL>insert into T values(to_date('01/06/2006 11:00','DD/MM/yyyy HH24:MI'), to_date('02/06/2006 10:30','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('01/06/2006 10:30','DD/MM/yyyy HH24:MI'), to_date('02/06/2006 14:00','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('01/06/2006 10:10','DD/MM/yyyy HH24:MI'), to_date('02/06/2006 13:50','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('03/06/2006 10:00','DD/MM/yyyy HH24:MI'), to_date('03/06/2006 13:00','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('04/06/2006 10:10','DD/MM/yyyy HH24:MI'), to_date('07/06/2006 13:50','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('05/06/2006 08:00','DD/MM/yyyy HH24:MI'), to_date('06/06/2006 08:00','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('05/06/2006 08:10','DD/MM/yyyy HH24:MI'), to_date('05/06/2006 08:12','DD/MM/yyyy HH24:MI') );
1 linha criada.
scott@DESENV:SQL>insert into T values(to_date('06/06/2006 08:00','DD/MM/yyyy HH24:MI'), to_date('09/06/2006 09:12','DD/MM/yyyy HH24:MI') );
1 linha criada.
=> Eis a consulta implementando a lógica que indiquei :
scott@DESENV:SQL>select start_date, end_date,
2 trunc( 24* (end_date - start_date)) as HORAS,
3 trunc( mod(mod(end_date - start_date,1)*24,1)*60 ) as MINUTOS
4 from T;
START_DATE END_DATE HORAS MINUTOS
------------------- ------------------- --------- ---------
01/06/2006 11:00:00 02/06/2006 10:30:00 23 30
01/06/2006 10:30:00 02/06/2006 14:00:00 27 29
01/06/2006 10:10:00 02/06/2006 13:50:00 27 40
03/06/2006 10:00:00 03/06/2006 13:00:00 3 0
04/06/2006 10:10:00 07/06/2006 13:50:00 75 40
05/06/2006 08:00:00 06/06/2006 08:00:00 24 0
05/06/2006 08:10:00 05/06/2006 08:12:00 0 2
06/06/2006 08:00:00 09/06/2006 09:12:00 73 12
8 linhas selecionadas.
Blz ???
Abraços,
Chiappa