Home - www.devmedia.com.br

Funções de data no SQL Server

Por Reinaldo Viana

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.

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!

Até a próxima !

 

Reinaldo Viana Alvares (reinaldo@sqlmagazine.com.br) é Tecnólogo em Processamento de Dados pela UNAMA - Universidade da Amazônia, especialista em Análise de Sistemas pela UFPA - Universidade Federal do Pará, mestrando em computação pela UFF - Universidade Federal Fluminense, professor da UNISUAM – Sociedade Unificada de Ensino Superior Augusto Motta e editor da revista SQL Magazine.

  Funçoes de Data no SQL Server    
  Banco de Dados e Modelagem de Dados - Parte Final    
  Banco de Dados e Modelagem de Dados - Parte 2    
  Banco de Dados e Modelagem de Dados - Parte 1    
  Solução do Desafio SQL    
  Desafio SQL    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004