T-SQL, Calculando a idade
O artigo abaixo foi escrito por Lynn Pettis para o site www.sqlservercentral.com. O texto original pode ser lido aqui.
Como calcular a idade de uma pessoa? Isto pode tornar-se um tema polêmico e com inúmeras soluções. Mas antes de criticar este tópico considere que ele pode ajudar a definir algumas regras a serem utilizadas na criação de um algoritmo que calcule a idade.
A parte mais difícil é saber o que fazer com os anos bissextos. Quando é que uma pessoa (objeto/documento) torna-se um ano mais velha? Neste pequeno artigo iremos definir que isto ocorre em 28 de fevereiro de anos não-bissextos.
Antes de mergulhar nos cálculos, vamos fazer alguns cálculos simples usando o SQL Server 2005.
Primeiro, vamos ver o que acontece quando adicionamos um ano às datas: 28/02/2008 e 29/02/2008:
declare @data1 datetime,
@data2 datetime
set @data1 = ‘20080228′
set @data2 = ‘20080229′
select dateadd(yy, 1, @data1), dateadd(yy, 1, @data2)
Resultado:
2009-02-28 00:00:00.000 2009-02-28 00:00:00.000
Observem que adicionar um ano para ambas as datas, resultam na mesma data. Vamos ver então o que acontece quando adicionamos 4 anos:
declare @data1 datetime,
@data2 datetime
set @data1 = ‘20080228′
set @data2 = ‘20080229′
select dateadd(yy, 4, @data1), dateadd(yy, 4, @data2)
Resultado:
2012-02-28 00:00:00.000 2012-02-29 00:00:00.000
Veja que agora as datas são diferentes. Isto é o que esperávamos.
Agora vamos ver a função DATEDIFF e ver um pouco como ela trabalha:
declare @data datetime,
@date2 datetime
set @data = ‘20080229′
set @date2 = ‘20090228′
select datediff(yy, @data, @date2)
Resultado:
1
Ok, mas qual o resultado da próxima consulta?
declare @data1 datetime,
@data2 datetime
set @data1 = ‘20081231′
set @data2 = ‘20090101′
select datediff(yy, @data1, @data2)
Resultado:
1
Espere…Isso não está certo, não existe um ano de diferença entre essas datas, alguma coisa deve estar errada.
Como você pode ver a função DATEDIFF retornou o numero da diferença entre os anos e não o número real de anos entre as duas datas.
Nós podemos usar esta informação para criar um T-SQL simples:
declare @data_nascimento datetime,
@idade int,
@data_atual datetime
set @data_atual = ‘2008-02-28′
set @data_nascimento = ‘2007-03-01′
set @idade = datediff(yy,@data_nascimento,@data_atual) - case when @data_atual < dateadd(yy,datediff(yy,@data_nascimento,@data_atual), @data_nascimento) then 1 else 0 end
select @idade
Conclusão
Este é apenas um método para calcular a idade de uma pessoa. Existem outras inúmeras formas que podem ser usadas. Tudo o que posso sugerir é que você use o método que melhor lhe atenda em cada situação.
Não ha comentários
Leave a reply