Calculando a idade usando T-SQL

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.

Leave a Reply