Somar Horas Sql Firebird

18/11/2015

0

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:
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

Dirceu Morais

Responder

Posts

18/11/2015

Rafael 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?
Responder

18/11/2015

Raimundo Pereira

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.
Responder

19/11/2015

Dirceu Morais

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar