Cargando la página...

Calcular una edad a partir de una fecha de nacimiento

Publicado por Gastón el 01/04/2009 en MySQL - Nivel Básico

Tabla de contenidos

Avatar de

La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.

Leer los comentarios.

Resúmen

El cálculo de fechas de nacimiento, o quizá más genérico, el cálculo de rangos en años es muy común en cualquier sistema de gestión. Aqui se explicará como lograr que el propio motor de MySQL sea el encargado de realizar dicho cálculo.

Sobre el autor

Avatar de Gastón

Gastón tiene 31 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.

Forma parte del club desde 19/10/2009 a las 20:52 habiendo estado en linea ayer a las 18:27 por última vez.

Ha publicado 50 artículos en clubdesarrolladores con un promedio de valoración de 7.96 puntos. Puedes visitar su sitio web en http://www.devstudios.com.ar

Estadísticas

  • Leido 14340 veces
  • Valorado 9.00 puntos

Funciones de fecha



Para hacer el cálculo de años transcurridos a partir de una fecha dada es necesario conocer al menos 3 funciones que permiten obtener fracciones de una fecha.

DAY(FECHA)



Permite obtener la parte correspondiente al día de FECHA.

MONTH(FECHA)



Permite obtener la parte correspondiente al mes de FECHA.

YEAR(FECHA)



Permite obtener la parte correspondiente al año de FECHA.

También utilizaremos una construcción de MySQL (que existe en otros motores, quizá con algunas diferencias) que emula un SWITCH-CASE.
Con esta construcción atacaremos las diferencias posibilidades que se presentan al calcular los años transcurridos.

Calculo de tiempo transcurrido en años



Primero que nada, imaginemos que tenemos una tabla en nuestra base de datos llamada usuarios y que la misma tiene una columna llamada fecha_nacimiento de tipo DATE. Adicionalmente supongamos que tenemos otra columna llamada nombre de tipo varchar(20).
Con esa estructura y algunos datos cargados podremos obtener un listado de los usuarios conteniendo nombre y edad a partir de los datos almacenados en la tabla y la siguiente sentencia SQL.

SELECT nombre, 
CASE
WHEN (MONTH(fecha_nacimiento) < MONTH(current_date)) THEN YEAR(current_date) - YEAR(fecha_nacimiento)
WHEN (MONTH(fecha_nacimiento) = MONTH(current_date)) AND (DAY(fecha_nacimiento) <= DAY(current_date)) THEN YEAR(current_date) - YEAR(fecha_nacimiento)
ELSE (YEAR(current_date) - YEAR(fecha_nacimiento)) - 1
END AS edad
FROM usuarios
ORDER BY 2 DESC


Con esto logramos el listado y la segunda columna contendrá la edad de los usuarios ordenada en forma decreciente.

Si tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.

Descargas

No existen descargas asociadas

Comentarios

Sus comentarios son importantes.

Listado de comentarios

1
05
julio
2009
Avatar de Jim Unikornian
Jim Unikornian aportó:
muy util gracias!!
2
02
agosto
2009
Avatar de André Karell Contreras Jiménez
:O No sabia que se podía usar eso con mysql. Gracias!
3
06
diciembre
2011
Avatar de Tatiana Andrea
Tatiana Andrea aportó:
Hola, vi tu mensaje y me parecio fantastico.
Queria hacerte una pequeña pregunta:
Hay posibilidad si tengo yo la siguiente tabla:
id
num_ident
nombres
fecha_ingreso

Mostrar las personas que cumplan dos meses de haber sido registradas al sistema.
Ejemplo:
id | num_iden | nombres | fecha_ingreso

1 |1234 | Juan | 11/12/2011
2 |9874 | Ana | 09/10/2011
3 |2587 | Pedro | 05/12/2011
4 |6581 | Cristina | 30/06/2011

Que pueda mostrar los usuarios que cumplen dos meses de estar registrados, en este caso el 09/12/2011 mostraria el registro 2, ya que el 09/12/2011 cumple los dos meses de haber ingresado al sistema.

Gracias
4
08
diciembre
2011
Avatar de Gastón
Gastón [Autor] aportó:
Hola,
La consulta del artículo trabaja parecido a lo que estas buscando, solo que retorna diferencias en años, no en meses.
Es cuestión de cambiar las funciones que se están utilizando, tomar en cuenta mes en lugar de año y finalmente hacer un filtro (imagino que having, dado que es una columna calculada).
El filtro debería ser "meses >= 2".

Un saludo.

Agregar un comentario

Debe estar identificado para agregar un comentario