martes, 31 de julio de 2012

Calcular la edad en SQL con una Funcion

A veces en proyectos de orden social nos encontramos en que debemos calcular la edad de una persona a partir de su fecha de nacimiento, y pues los primero que a uno se le ocurre es restar las dos fechas con la función datediff:

select DATEDIFF(year,fNacimiento,getdate()) from personas
Sin embargo esta respuesta no es tan exacta por que no tiene en cuenta si ya cumplió o no años, para solucionar eso, hay que evaluar si la fecha de cumpleaños ya paso y si es así sumar un año.

select
DATEDIFF(year,fNacimiento,getdate() )+   
case
when ( Month(getdate()) < Month(fNacimiento) Or
(Month(getdate()) = Month(fNacimiento) And
Day(getdate()) < day(fNacimiento))) Then -1 else 0 end
as edad from personas

Ahora esto lo podemos poner en una función para calcular la edad cada vez que lo necesite, asi:


CREATE FUNCTION [dbo].[fnEdad]
(-- Add the parameters for the function here@fNacimiento datetime,
@fdiligenciamiento datetime
)RETURNS int
AS
BEGIN
-- Declare the return variable hereDECLARE @ResultVar int
set @ResultVar = DATEDIFF(year,@fNacimiento,@fdiligenciamiento )+   
case
when ( Month(@fdiligenciamiento) < Month(@fNacimiento) Or (Month(@fdiligenciamiento) = Month(@fNacimiento) And Day(@fdiligenciamiento) < day(@fNacimiento))) Then -1 else 0 end
RETURN @ResultVar
END

Ahora podemos utilizar la función fnEdad para calcular la edad de una persona, incluso si queremos saber la edad en una fecha especifica se envia como segundo parametro la edad en la que se desea calcular dicha fecha:

select dbo.FnEdad(fechanacimiento,getdate()) as edad from personas

Espero les sea de utilidad!
Saludos!