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
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
- Os 10 erros mais cometidos na configuração do PostgreSQL
- Desafio SQL Server: retornando registros perdidos
- Guia de Referência Banco de dados NoSQL
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 !