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!
This space is intended to be a channel of communication
between the enthusiasts of SQL Server.
We must be humble to recognise that we don't know everything.
In fact we know nothing... Everyday it's an opportunity to learn something new.
Questions and comments are welcome.
Contact me at
periclessevegnani@gmail.com or +55(47)999-189-109.
segunda-feira, 12 de novembro de 2007
quinta-feira, 1 de novembro de 2007
SQL 2005 Cumulative Update Package #4
A Microsoft liberou em 17 de outubro de 2007, um novo pacote de atualizações acumuladas para o banco de dados SQL 2005 (após o Service Pack 2).
A maioria dos bugs corrigidos estão relacionados a ferramentas auxiliares do SQL, tais como Integration Services, Analysis Services, ou ainda, recursos menos utilizados, como replicação e database mirroring.
Porém, um bug em particular chamou a atenção, foi o de 50001716, que foi identificado por deixar as queries mais lentas do que na versão 2000, quando utilizado o operador LIKE. Segundo a Microsoft, o engine escolhe a versão sub-otimizada do plano de execução quando encontra este operador.
Segue link para mais detalhes.
http://support.microsoft.com/kb/941450/LN/
A maioria dos bugs corrigidos estão relacionados a ferramentas auxiliares do SQL, tais como Integration Services, Analysis Services, ou ainda, recursos menos utilizados, como replicação e database mirroring.
Porém, um bug em particular chamou a atenção, foi o de 50001716, que foi identificado por deixar as queries mais lentas do que na versão 2000, quando utilizado o operador LIKE. Segundo a Microsoft, o engine escolhe a versão sub-otimizada do plano de execução quando encontra este operador.
Segue link para mais detalhes.
http://support.microsoft.com/kb/941450/LN/
Assinar:
Postagens (Atom)