DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Como adicionar ou remover horas de um campo timestamp SQL Firebird

Fala galera de Delphi, tudo beleza?

Hoje vamos ver uma dica de SQL, muito útil no nosso dia a dia.

Há casos que estamos montando nossa consulta, procedure ou trigger e precisamos alterar o valor de um campo timestmp, mais precisamente adicionar ou remover horas.

a primeira coisa que vem a cabeça, seria algo assim

1
2
3
4
-- para remover uma hora, normalmente pensamos assim, mas isso remove um dia.
SELECT
CURRENT_TIMESTAMP - 1
FROM rdb$database r

Como colocado no comentário, o sql acima remove um dia.

Ai então, usando a lógica, podemos chegar a seguinte conclusão:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- adiciona 12 horas.
SELECT
CURRENT_TIMESTAMP + 0.5
FROM rdb$database r
 
-- remove 6 horas.
SELECT
CURRENT_TIMESTAMP - 0.25
FROM rdb$database r
 
-- adiciona 3 horas.
SELECT
CURRENT_TIMESTAMP + 0.125
FROM rdb$database r
 
--...

Até funciona, ir tentando calcular para achar o valor correspondente
1 – 24 horas
0.5 – 12 horas
0.25 – 6 horas

Porém é fácil de cometermos enganos e fica difícil a leitura para outra pessoa que venha a ler os comandos.

Então, pesquisando encontrei a seguinte UDF que já vem como padrão na instalação do firebird.
ADDHOUR

Como o próprio nome sugere, com ela podemos facilmente incluir horas e inclusive vamos utilizar ela para remover horas. Vamos aos exemplos:

Para utiliza-la de modo geral é addhour(valor_time_stamp, horas).

1
2
3
4
5
6
7
8
9
-- adicionando 3 horas.
SELECT
addhour( CURRENT_TIMESTAMP, 3 )
FROM rdb$database r
 
-- removendo uma hora
SELECT
addhour( CURRENT_TIMESTAMP, -1 )
FROM rdb$database r

O segredo para diminuir horas foi passar o parâmetro negativo.

Existem outras UDFs nativas da instalação que server para adicionar e remover minutos, segundos, dias e etc. Mas a abordagem ficará para um próximo post.

As Consultas SQL foram testadas no Firebird 3.0.

Esperam que tenham gostado pessoal.

Dúvidas ou sugestões? Deixe o seu comentário!

Bons códigos e até a próxima. Valeu!

Facebook Comments Box
  • Giovani Da Cruz
  • 6.329 views
  • 3 comentários
  • 25 de outubro de 2019

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

3 respostas para “Como adicionar ou remover horas de um campo timestamp SQL Firebird”

  1. mariodosreis disse:

    Recordo ter lido algo sobre a incompatibilidade do FB3.0.. com a rfunc.dll e as duas funções acima se estou bem lembrado fazem parte dessa lib, logo, não funcionam mais com o FB3

  2. Olá @mario, testei aqui na minha máquina com o Firebird 3.0.5 e a princípio funcionou perfeitamente.

  3. Talvez só esteja faltando declarar a UDF no banco. Tente rodar este script:

    1
    2
    3
    4
    5
    
    DECLARE EXTERNAL FUNCTION ADDHOUR
        TIMESTAMP,
        INTEGER
    RETURNS TIMESTAMP
    ENTRY_POINT 'addHour' MODULE_NAME 'fbudf';

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados