segunda-feira, 12 de novembro de 2007

Trabalhando com Datas no SQL Server

Um assunto muito recorrente nos fóruns de discussão, é o tratamento de campos de data/hora no SQL Server.

O problema basicamente se resume a dois pontos:
- passagem de parâmetros para um comando SQL;
- exibição de data/hora em algum formato específico.

Sobre a passagem de parâmetros, o formato padrão do SQL Server é o americano (USA): mm/dd/yyyy. Desta forma, 10/04/2007 seria dia 04 de Outubro de 2007.

Ainda sobre a passagem de parâmetros, ela se dá em 2 momentos:
- através da aplicação (Delphi, VB, etc.);
- via T-SQL, em stored procedures, triggers, por exemplo.

Eu diria que na passagem de parâmetros via aplicação - utilizando os recursos normais dos componentes de acesso a dados - não há com o que se preocupar, uma vez que o componente de acesso a dados vai se encarregar de fazê-lo, e informar o parâmetro no formato devido.

E por último, quando houver necessidade de informar uma data manualmente, "na unha", eu sugeriria fazê-lo da seguinte forma, utilizando o exemplo acima: "dd-mes-yyyy".

Ex.:

SELECT *
FROM Pedidos
WHERE DataPedido BETWEEN '01-oct-2007' AND '31-dec-2007'

Percebam que eu coloquei o nome do mês, de forma abreviada (em inglês). É isto mesmo !
Faz 10 anos que esta fórmula tem dado certo para mim... por isso a recomendo.

Não preciso me preocupar com barras ou se a primeira parte é o mês ou dia... passo desta forma e está resolvido.

Ok, uma vez que a passagem de parâmetros está esclarecida, vamos a segunda parte: a exibição.

Em primeiro lugar, gostaria de colocar que se tem alguém que deve se preocupar com exibição de datas, o responsável é a aplicação front-end.

Banco de dados não foi feito pra formatar datas e/ou números. Banco de dados foi feito pra armazenar dados, e retornar, da forma mais rápida possível e confiável.

Porém, às vezes, desejamos efetuar um SELECT e imprimir o resultado, precisamos formatar as datas.

Aí vai a dica: converta o campo data/hora para texto.

Ex.:

SELECT CONVERT(VARCHAR(20), GETDATE(), 101) AS Data

Notem o 3o. parâmetro - código 101.

No BOL (Books OnLine) existe uma tabela de códigos para este parâmetro, que vai de 101 até 130.

O padrão britânico/francês, por exemplo, que possui o formato mais próximo do nosso (dd/mm/yy), é o código 103.

Teste os formatos e encontre o mais apropriado para sua necessidade.

Abraços e até a próxima!

Nenhum comentário: