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.

 

1 comment so far

  1. Isaac on

    Vlw ai muito bom o tópico me ajudou bastante


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: