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 |
-- 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
--... |
-- 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 |
-- 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!
-
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!
Posts Relacionados - Continue Aprendendo
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
Olá @mario, testei aqui na minha máquina com o Firebird 3.0.5 e a princípio funcionou perfeitamente.
Talvez só esteja faltando declarar a UDF no banco. Tente rodar este script: