Somar Horas Sql Firebird
Bom dia pessoal como faço um Sql para somar horas? Pesquisei vários post mas são antigos, grandes e não entendi o funcionamento.
Ex: Tenho uma viagem que sai (08:11) a viagem dura (0:37min).
A grosso modo o sql seria assim:
mas sei que o sql não soma horas diretas.
Estou usando o firebird 2.5
Desde já agradeço
Ex: Tenho uma viagem que sai (08:11) a viagem dura (0:37min).
A grosso modo o sql seria assim:
Select Sai + Dura as hora_Chegada From Viagem Where linha = 2341 and data_viagem = current_date
mas sei que o sql não soma horas diretas.
Estou usando o firebird 2.5
Desde já agradeço
Dirceu Morais
Curtidas 0
Respostas
Rafael Bosco
18/11/2015
Não é melhor você fazer o cálculo do tempo diretamente pela aplicação e salvar essa informação no banco de dados, e depois só dar o select, sem precisar fazer a conversão por SQL?
GOSTEI 0
Raimundo Pereira
18/11/2015
Se for seguir a dica.
Rafael Gustavo Dal Bosco
Não é melhor você fazer o cálculo do tempo diretamente pela aplicação e salvar essa informação no banco de dados, e depois só dar o select, sem precisar fazer a conversão por SQL?
Use variáveis ttime;
Exemplo
TEMPO1 ,
TEMPO2,
TEMPO_FINAL:TTIME;
TEMPO1:=INFORME A HORA;
TEMPO2:=INFORME A HORA;
TEMPO_FINAL:=TEMPO1-TEMPO2;
Ai você segue de acordo com a sua necessidade.
Rafael Gustavo Dal Bosco
Não é melhor você fazer o cálculo do tempo diretamente pela aplicação e salvar essa informação no banco de dados, e depois só dar o select, sem precisar fazer a conversão por SQL?
Use variáveis ttime;
Exemplo
TEMPO1 ,
TEMPO2,
TEMPO_FINAL:TTIME;
TEMPO1:=INFORME A HORA;
TEMPO2:=INFORME A HORA;
TEMPO_FINAL:=TEMPO1-TEMPO2;
Ai você segue de acordo com a sua necessidade.
GOSTEI 0
Dirceu Morais
18/11/2015
Fiz uma procedure para resolver meu problema.
create or alter procedure HORA_FINAL (
HORA_SAIDA time,
DURACAO time)
returns (
HORA_CHEGADA time)
as
declare variable TOTALHORAS varchar(9);
declare variable SAI_HORAS integer;
declare variable SAI_MINUTOS integer;
declare variable PERC_HORAS integer;
declare variable PERC_MINUTOS integer;
declare variable SOMA_MINUTOS integer;
declare variable SOMA_HORAS integer;
begin
Sai_horas = Extract(hour from hora_saida);
Perc_horas = Extract(hour from Duracao);
Soma_horas = sai_horas + perc_horas;
if (soma_horas >= 24) then
soma_horas = soma_horas - 24;
sai_minutos = Extract(minute from hora_saida);
perc_minutos = Extract(Minute from tempo_percurso);
soma_minutos = sai_minutos + perc_minutos;
if (soma_minutos >= 60) then
Begin
soma_horas = soma_horas + 1;
if (soma_horas >= 24) then
soma_horas = soma_horas - 24;
soma_minutos = soma_minutos - 60;
end
if ((soma_minutos < 10) or (soma_minutos = 0) ) then
TotalHoras = Cast(soma_horas as Varchar(2)) || ':0'||CAST(soma_minutos AS VARCHAR(2)) || ':00';
ELSE
TotalHoras = Cast(soma_horas as VarChar(2)) || ':' || CAST(soma_minutos AS VARCHAR(2)) || ':00';
-- TotalHoras = TotalHoras;
hora_chegada = CAST(TotalHoras AS time);
SUSPEND;
end
GOSTEI 0