Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Horas e Datas em IB/FB
Operações com campos temporais no InterBase/Firebird
Os campos DATE, TIME e TIMESTAMP sempre foram cercados de um certo mistério, principalmente para os novos usuários. A introdução do dialeto 3 no IB 6.0 e a conseqüente mudança de nomenclatura e de significado dos campos DATE contribuíram ainda mais para a possível confusão dos usuários entre os tipos de data e hora. Neste artigo, apresento os três tipos de dados existentes no InterBase/Firebird (IB/FB), para manipular data, hora e data+hora, mostrando exemplos práticos de sua utilização.
Tipos disponíveis
Nas versões anteriores ao IB 6.0, o único tipo de dados existente para manipular data e/ou hora era DATE, que armazenava juntamente a data e a hora. Não havia tipos para armazenar datas ou horas separadamente. As novidades que vieram com o IB 6.0 – entre elas, os dialetos – acabaram com essa “limitação”.
O principal motivo da introdução de dialetos nos bancos de dados (BDs) foi, justamente, oferecer um meio de disponibilizar novos tipos e funcionalidades sem quebrar a compatibilidade com os bancos anteriores ao IB 6.0. Um banco gerado em uma versão anterior à 6.0 é tratado sempre como dialeto 1. Neste dialeto, o antigo tipo DATE é interpretado como TIMESTAMP, e continua sendo o único disponível para manipulação de datas e horas. Já nos BDs criados no dialeto 3, existem três tipos de dados temporais, conforme a tabela abaixo:
Tipo |
Descrição |
Intervalo Permitido |
TIMESTAMP |
Substituto do antigo tipo DATE, armazena um par de composto por data + hora |
(Veja intervalos abaixo) |
DATE |
Armazena somente uma data (ano, mês e dia) |
1/01/0001 a 31/12/9999 |
TIME |
Armazena somente uma hora (hora, minuto, segundos e frações de segundo) |
00:00 AM a 23:59.9999 PM |
Tabela1. Tipos de dados temporais
Dica: O dialeto 1 é mantido apenas para efeito de compatibilidade. Todos os novos bancos devem ser criados no dialeto 3 que oferece mais recursos e facilidades.
No restante deste artigo vamos trabalhar somente com tipos do dialeto 3. Note que tanto o tipo DATE, quanto os tipos TIME e TIMESTAMP, são armazenados internamente no banco como uma Longword (32 bits).
Modified Julian Date (MJD)
O InterBase e o Firebird utilizam um formato interno para o cálculo de datas, chamado Modified Julian Dates – MJD, que consiste em uma versão modificada do sistema Juliano. No sistema Juliano, o calendário começa ao meio-dia de 01/01/4713 a.c.; já no MJD, o início é 17/11/1858, ou seja, 2.400.000 dias e meio após a data inicial do sistema Juliano. Esse número não foi escolhido por acaso. Se você está curioso para saber mais sobre os sistemas MJD e o Juliano clássico, consulte os links ...