Funções de data no SQL Server


Autor/fonte: Reinaldo Viana



Digg del.icio.us

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())

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

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.

Tenha bons estudos!

Até a próxima!




Enviado por xKuRt em 16/09/2006 às 15:36


Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).


Envio de comentário:




  

Quinta, 18 de Setembro de 2014




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
C# - Guia do Programador


Capa do livro
VBA e Macros para Microsoft Office Excel 2007


Capa do livro
O Melhor do PHP





Hostnet

IMD