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: GETDATE, DATEPART, DATEADD 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) O 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 e 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())

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,<BR><BR>  DATEDIFF(DAY,NASCIMENTO,GETDATE())AS DIASVIVIDOS,<BR><BR>  DATEDIFF(MONTH,NASCIMENTO,GETDATE()) AS MESESVIVIDOS,<BR><BR>  CASE WHEN<BR><BR>     DATEPART(MONTH,NASCIMENTO)<= DATEPART(MONTH,GETDATE()) AND <BR><BR>     DATEPART(DAY,NASCIMENTO)<= DATEPART(DAY,GETDATE()) <BR><BR>  THEN<BR><BR>        (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))<BR><BR>  ELSE<BR><BR>       (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))- 1<BR><BR>       END AS IDADEATUAL,<BR><BR>  DATEDIFF(YEAR,NASCIMENTO,GETDATE())AS IDADE3112<BR><BR>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.

Veja mais conteúdo de banco de dados

Referências:

•  Books OnLine do SQL Server

•  SQL Server 7: Transact-SQL – Guia de Consulta Rápida: Novatec Editora

Tenha bons estudos!

Até a próxima !