Atenção: esse artigo tem uma palestra complementar. Clique e assista!

De que trata o artigo?

Este artigo apresenta o desenvolvimento de soluções para problemas cotidianos enfrentados por DBAs e desenvolvedores de aplicações para banco dados.


Para que serve?

Fornecer conceitos de utilização de funcionalidades do padrão ANSI SQL na resolução de problemas enfrentados no dia-a-dia na recuperação de informações do banco de dados.


Em que situação o tema é útil?

Escrever declarações SQL.

Sou da opinião que a tecnologia de informação (TI) é ingrata conosco, profissionais da área. As técnicas e os softwares estão constantemente sendo aperfeiçoados, as linguagens ficam mais versáteis para termos sistemas cada vez mais rápidos e eficientes.

Mas, no fim das contas, têm tantas coisas que precisamos dar atenção num projeto de TI que acabamos nos esquecendo de coisas básicas. Isso acontece pela simples razão de que alguém supõe que um determinado tópico é elementar e dispensa maiores comentários.

Neste artigo, pretendo falar de um destes tópicos elementares: como trabalhar com datas nas nossas declarações SQL.

A primeira vista, isso pode lhe parecer muito simples. Mas nós não podemos esquecer que as datas são parte importante nas nossas bases de dados. Aliás, é muito difícil encontrarmos um banco de dados comercial que não contenha informações sobre datas e horários.

Desta maneira, existe uma infinidade de usos diferentes de informações temporais. Mas, por outro lado, existem vários sistemas gerenciadores de bancos de dados (SGBDs) no mercado e padronização não é o forte deles.

A seguir, mostrarei algumas características e exemplos do uso de datas em consultas SQL. E também mostrarei alguns conceitos interessantes relacionados ao uso de datas.

Datas e SGBDs

Se você tem dúvidas sobre a importância das datas num modelo de banco de dados, procure imaginar um banco de dados que não tenha nenhuma referência a datas. Eu diria que este é um exercício bem difícil, já que a enorme maioria dos bancos de dados que eu conheço está repleta de campos com datas.

É parte da natureza humana dar muita importância à contagem do tempo e aos eventos que acontecem ao longo desta “história”. No final das contas, o que armazenamos nos nossos bancos de dados são estes tais “eventos” e o momento em que eles ocorrem ao longo desta “história”.

As datas são de fato essenciais nos bancos de dados. São tão importantes que cada SGBD procura incluir extensões da linguagem SQL padrão para oferecer mais e melhores recursos para manipulação de datas. Por conta disso, existem várias funcionalidades que existem num SGBD e não em outro.

Existe um órgão que define um padrão para a linguagem SQL e muitas vezes os fabricantes incluem este padrão dentro de seus produtos (além de recheá-los de recursos adicionais).

Atualmente a maioria dos SGBDs é “razoavelmente” compatível com o padrão ANSI SQL 99, ou seja, o padrão SQL definido pelo comitê American National Standard Institute (ANSI) na edição do ano de 1999.

Vamos nos ater o máximo possível a este padrão, que por si só já estabelece uma série de funções e recursos poderosos para manipulação de datas. Quando houver exceções a esta regra, apresentarei informações complementares comparando o comportamento de cinco diferentes SGBDs: SQL SERVER, ORACLE, DB2, POSTGRES e FIREBIRD.

Tipos de Dados

Existem vários tipos de dados referentes a datas que são adotados pelos diversos SGBDs. Cada um destes SGBDs adota um grupo diferente de tipos de dados, mas praticamente todos eles usam os tipos de dados DATE e TIMESTAMP (se você usa SQL SERVER, veja Nota DevMan 1).

Nota DevMan1. O tipo de dados de data no SQL SERVER

Existe uma confusão muito comum sobre datas quando se trabalha com SQL SERVER. Você pode usar o tipo de dados DATE, que funcionará exatamente como nos demais SGBDs, mas precisa tomar cuidado com o tipo de dados TIMESTAMP.

Conforme as palavras do BOOKS ONLINE, este tipo de dados não tem nada relacionado com datas e horas (http://technet.microsoft.com/en-us/library/ms191240.aspx).

...
Quer ler esse conteúdo completo? Tenha acesso completo