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!
Muchas gracias por este articulo me sirvio bastante.
ResponderEliminarviejo para la proxima no pongas colores tan locos =/ azul marino con fondo oscuro... pero muchas gracias por la info...
ResponderEliminarEstimado muy buen aporte me sirvió de mucho para lo que estoy realizando, gracias.
ResponderEliminarCreo que se podria mejorar la función con un solo comparador AND y teniendo en cuenta que la persona hace años una vez ha pasado el día de su aniversario, no al empezar.
ResponderEliminarselect
DATEDIFF(year,fNacimiento,getdate() )+
case
when ( (Month(getdate()) <= Month(fNacimiento)) AND
(Day(getdate()) <= day(fNacimiento))) Then -1 else 0 end
as edad from personas
Buen aporte, sin embargo, en ese caso que mencionas la formula no serviría si por ejemplo calculamos el cumpleaños el día 22 de abril para una persona que nació el 2 de mayo, pues en ese caso el día de cálculo es mayor que el día de nacimiento por lo que no se cumpliría la condición de restar uno a la edad y mostraría erróneamente la edad.
ResponderEliminarSaludos, y gracias por comentar!
Como calculo la fecha de nacimiento apartir de la edad en SQL????
ResponderEliminarBuenas tardes, para hacer eso, solo debes utilizar la funcion dateadd para restarle la edad de la persona a la fecha actual (getdate()),
ResponderEliminarsupongamos que quiere saber la fecha de nacimiento de alguien que tiene 31 años, 3 meses y 5 dias, la sentencia serìa como sigue:
select dateadd(day,-5,dateadd(month,-3,dateadd(year,-31,getdate())))
como se puede dar cuenta es una función anidada, en la cual, en la primer agrupación resto los años, luego resto los meses y finalmente resto los dias.
Espero le sirva!