Published on

March 26, 2017

Calculando la edad en SQL Server

El cálculo de la edad es una tarea común que los desarrolladores a menudo encuentran en SQL Server. Si bien hay muchas soluciones disponibles en línea, la mayoría de ellas solo calculan la edad en años, meses o días. Sin embargo, hay casos en los que estas soluciones no brindan resultados precisos.

Por ejemplo, consideremos un bebé nacido el 31 de marzo de 2016. Según una calculadora de edad en línea popular, el bebé tiene “0 meses 30 días” el 30 de abril y “1 mes 1 día” el 1 de mayo. Esta inconsistencia puede causar problemas en varios escenarios, como facturación o asuntos legales.

La raíz del problema radica en calcular la edad como una diferencia de tiempo entre las fechas de “Fecha de nacimiento” y “Hoy”. Este enfoque no tiene en cuenta la no linealidad de los calendarios. Los diferentes meses tienen diferentes números de días y los años bisiestos complican aún más el cálculo.

Para abordar este problema, debemos cambiar nuestro enfoque para el cálculo de la edad. En lugar de calcular la diferencia de tiempo, debemos agregar unidades de edad a la “fecha de nacimiento” hasta llegar a la “fecha de hoy”. Esto asegura que tengamos en cuenta con precisión el número de años, meses y días.

Echemos un vistazo a una implementación de ejemplo:

DECLARE @FechaNacimiento DATE = '2016-03-31'
DECLARE @Hoy DATE = GETDATE()

DECLARE @Años INT = 0
DECLARE @Meses INT = 0
DECLARE @Días INT = 0

WHILE @FechaNacimiento < @Hoy
BEGIN
    SET @Años = @Años + 1
    SET @FechaNacimiento = DATEADD(YEAR, 1, @FechaNacimiento)
END

SET @FechaNacimiento = DATEADD(YEAR, -1, @FechaNacimiento)

WHILE @FechaNacimiento < @Hoy
BEGIN
    SET @Meses = @Meses + 1
    SET @FechaNacimiento = DATEADD(MONTH, 1, @FechaNacimiento)
END

SET @FechaNacimiento = DATEADD(MONTH, -1, @FechaNacimiento)

WHILE @FechaNacimiento < @Hoy
BEGIN
    SET @Días = @Días + 1
    SET @FechaNacimiento = DATEADD(DAY, 1, @FechaNacimiento)
END

SELECT @Años AS Años, @Meses AS Meses, @Días AS Días

Esta implementación utiliza un bucle para incrementar las unidades de edad (años, meses y días) hasta que la “fecha de nacimiento” alcance la “fecha de hoy”. El resultado es la edad precisa en años, meses y días.

Es importante tener en cuenta que esta implementación se puede ampliar aún más para incluir horas, minutos, segundos e incluso milisegundos si es necesario. Sin embargo, estos cálculos funcionan mejor con fechas del tipo de datos DATETIME, no del tipo de datos DATE.

Al utilizar este enfoque, puede asegurar cálculos precisos de edad en sus consultas de SQL Server. No dude en descargar el script adjunto y probarlo en sus casos de prueba. Agradecemos mucho sus comentarios.

En la próxima parte de este artículo, exploraremos cómo convertir este script en una función que calcule la edad en diferentes unidades de tiempo según sus parámetros. ¡Estén atentos para más información!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.