segunda-feira, 31 de janeiro de 2011

SQL Server - Funções de data


Prezado leitor. Se você tivesse nascido ontem, obviamente hoje você teria um dia de idade. Agora responda rápido, e em SQL: qual o número de dias vividos por você até hoje?
Aprenderemos neste artigo a trabalhar com funções de data no SQL Server. As principais são:GETDATEDATEPARTDATEADD e DATEDIFF.
Um detalhe importante é que as funções de data trabalham referenciando unidades de data. As mais comuns são:
- year(ano);
- month(mês);
- day(dia);
Observações:
1) Books OnLine do SQL Server apresenta a lista completa desses parâmetros de valores (unidades ), bem como outras funções de data;
2) as configurações de data para esse artigo estão no formato americano. Logo, a data 02/01/2004 deve ser lida como primeiro de fevereiro de 2004.
GETDATE ( )
A função GETDATE retorna a data e a hora atuais do sistema. Podemos, no Query Analyzer , digitar o seguinte comando para obter a data e hora atuais:
SELECT GETDATE ( )
DATEPART ( unidade data )
A função DATEPART retorna a parte especificada de uma data como um inteiro. Observe os exemplos:
SELECT DATEPART ( YEAR , '02/01/2004' )
Reposta: 2004
SELECT DATEPART ( MONTH , '02/01/2004' )
Reposta: 2
SELECT DATEPART ( DAY , '02/01/2004' )
Reposta: 1
DATEADD ( unidade numero_unid,data )
A função DATEADD retorna uma nova data através da soma do número de unidades especificadas pelo valor unidade a uma data. Observe os exemplos:
SELECT DATEADD ( DAY ,6, '02/01/2004' )
Reposta: 2004-02-07
SELECT DATEADD ( MONTH ,6, '02/01/2004' )
Reposta: 2004-08-01
SELECT DATEADD ( YEAR ,6, '02/01/2004' )
Reposta: 2010-02-01
DATEDIFF ( unidade data1,data2 )
A função DATEDIFF calcula a diferença entre as datas data2 data1 , retornando o resultado como um inteiro, cuja unidade é definida pelo valor unidade . Observe os exemplos:
SELECT DATEDIFF ( DAY , '02/01/2004' , '05/25/2004' )
Reposta: 114 (dias)
SELECT DATEDIFF ( MONTH , '02/01/2004' , '05/25/2004' )
Reposta: 3(meses)
SELECT DATEDIFF ( YEAR , '02/01/2004' , '05/25/2006' )
Reposta: 2(anos)
Dessa forma, a expressão SQL que retorna o número de dias vivido por você até hoje é:
SELECT DATEDIFF(DAY, suadata, GETDATE())
onde suadata deve ser substituída pela sua data de nascimento.
Outro exemplo interessante é mostrado através do código T-SQL abaixo. Usando funções de data, exibimos, para cada cliente, a idade em dias, meses e em anos (idade do cliente na data atual e em 31 de dezembro). 

Observe a lógica utilizada no comando CASE. Neste caso, é testado se o cliente já fez aniversário, comparando o mês em que ele nasceu com o mês corrente e comparando o dia em que ele nasceu com o dia corrente. Se essa comparação for verdadeira, basta diminuir o ano atual do ano de nascimento do cliente. Caso contrário (o cliente ainda não fez aniversário), temos que diminuir 1 do valor anterior.
SELECT NOME, NASCIMENTO,

  DATEDIFF(DAY,NASCIMENTO,GETDATE())AS DIASVIVIDOS,

  DATEDIFF(MONTH,NASCIMENTO,GETDATE()) AS MESESVIVIDOS,

  CASE WHEN

     DATEPART(MONTH,NASCIMENTO)<= DATEPART(MONTH,GETDATE()) AND

     DATEPART(DAY,NASCIMENTO)<= DATEPART(DAY,GETDATE())

  THEN

        (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))

  ELSE

       (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))- 1

       END AS IDADEATUAL,

  DATEDIFF(YEAR,NASCIMENTO,GETDATE())AS IDADE3112

FROM CLIENTE
26-05pic.JPG 
Vimos, neste artigo, exemplos do uso de funções de data no SQL Server. Outros SGBDs implementam funções de data, provavelmente com sintaxe diferente. Consulte a documentação do SGBD que você utiliza, para obter maiores detalhes.
Baixe aqui o script utilizado nesse artigo.
Referências:
•  Books OnLine do SQL Server
•  SQL Server 7: Transact-SQL – Guia de Consulta Rápida: Novatec Editora
Tenha bons estudos!

Sem comentários:

Enviar um comentário