Ir para o conteúdo principal

Procedure - Data Hora Útil Futuro - Adicionar minutos

SQL: 

CREATE OR ALTER PROCEDURE ADD_HORA_UTIL (ADDMINUTOS integer, UTIL_INI time, UTIL_FIM time)
RETURNS (datahora timestamp)
as
declare variable minutos integer;
declare variable atualtime time;

BEGIN
  datahora=current_timestamp;
  minutos = 0;
  while (minutos<=addminutos) do
  begin
    if ((extract(weekday from datahora) not in (0,6)) and (extract(hour from datahora)<>12)) then
    begin
      datahora = datahora + 0.000695; /* aprox. 1 min */
      atualtime= extract(hour from datahora)||':'||extract(minute from datahora)||':'||extract(second from datahora);
      if ((atualtime <= :util_fim) and (atualtime >= :util_ini)) then
      begin
        minutos = minutos + 1;
      end        
    end
    else
    begin
      datahora = datahora + 0.000695; /* aprox. 1 min */
    end
  end
suspend;
END

A procedure esta sendo compartilhada e possui o funcionamento de adicionar minutos a data hora ATUAL, neste caso, sempre sobre o current_timestamp, a mesma desconsidera sábados e domingos além de não considerar os minutos das 12:00 as 12:59;
Essas definições básicas podem ser facilmente personalizadas antes da criação da procedure.

Parâmetros da procedure:

Entrada:

  • ADDMINUTOS(integer) = Número inteiro de minutos a serem adicionados.
  • UTIL_INI (TIME) = Hora útil inicial - Exemplo: '08:00:00'
  • UTIL_FIM (TIME) = Hora útil final    - Exemplo: '18:00:00'

Saída

  • DATAHORA = Data atual incrementada do numero de minutos uteis solicitados.

Chamada da procedure:

SELECT * 
  FROM ADD_HORA_UTIL(180, '08:00:00', '18:00:00') -- Adiciona 3 hs a data hora atual.

Retorno:

26/12/2019 15:23:57