Somar Horas Sql Firebird
18/11/2015
0
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
Posts
18/11/2015
Rafael Bosco
18/11/2015
Raimundo Pereira
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.
19/11/2015
Dirceu Morais
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
Clique aqui para fazer login e interagir na Comunidade :)