Array
(
)

Somar Horas Sql Firebird

Dirceu Morais
   - 18 nov 2015

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:
#Código

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

Rafael Bosco
   - 18 nov 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?

0
|
0

P2
   - 18 nov 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.

0
|
0

Dirceu Morais
   - 19 nov 2015

Fiz uma procedure para resolver meu problema.

#Código

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

0
|
0