Trucos MySQL - Calcular la edad a partir de la fecha de nacimiento

Autoría: Daniel Ibáñez

Desde que se me perdió el móvil por segunda vez pensé que, si pasaba una tercera vez, no quería tener que pedir de nuevo el teléfono a mis amigos así que, friki de mi, se me ocurrió hacer una pequeña herramienta web para tener una sencilla agenda y poder consultar sus datos sin importar dónde estuviese.

Hace como dos días, mi amigo Gonzalo me preguntó la edad de Pablo, y, como programador que soy le dije:
- "Es tan sencillo como decirle al servidor mysql: SELECT `AMIGOS`.`F_NACIMIENTO` FROM `AMIGOS` WHERE `AMIGOS`.`NOMBRE`='PABLO' AND `AMIGOS`.`APELLIDO`='IGLESIAS'; ".

La cara que se le quedó fue un auténtico cuadro, y tras responderme que estaba loco, le dije: "Tu tranquilo, que yo te lo demuestro".

Todo confiado, accedí a mi servidor y lancé la mencionada consulta. El servidor, tan servil como siempre me devolvió: "1983-05-10", pero, todo este ingenio, acabó con un: "Bah, este dato no es suficiente, yo quiero la edad, no la fecha de nacimiento".

Así que, se abrió un frente en mi mente:

 
CÓMO CONSEGUIR LA EDAD A PARTIR DE UNA FECHA DADA


Para conseguir la edad de mis amigos, utilizaremos la tabla AMIGOS de mi agenda.


La primera idea fue: "Voy a restar al año actual el año de nacimiento", así que generé la consulta:

Lo que tendría que usar mi consulta serían:
    - Una llamada a la función CURDATE()
    - Dos llamadas a la función YEAR(FECHA)

 

SELECT `AMIGOS`.`NOMBRE`, YEAR(CURDATE())-YEAR(`AMIGOS`.`F_NACIMIENTO`)  AS `EDAD_ACTUAL` FROM `AMIGOS` WHERE `AMIGOS`.`NOMBRE`='PABLO' AND `AMIGOS`.`APELLIDO`='IGLESIAS';


Pero los resultados no eran correctos, ya que los resultados obtenidos, el día 10-04-2008 eran:

`AMIGOS`.`NOMBRE` `EDAD_ACTUAL`
PABLO 25


Sin embargo, y aunque Pablo aparenta ser mayor de lo que es, a esa fecha sólo tenía 24.

La consulta no tenía en cuenta el mes y el año de nacimiento, ya que si aún no has cumplido los años, no tendrías que contabilizarla.

La solución se basaba en restar uno a la edad si el mes y día de nacimiento eran posteriores al mes y día actual.

Así que, nos servimos de la función DATE_FORMAT.
Lo que tendría que añadir a mi consulta serían:
    - Una llamada a la función CURDATE()
    - Una llamada a la función DATE_FORMAT(FECHA, FORMATO)
    - Una cláusula IF para discernir si ya ha sido su cumpleaños o no

 

SELECT `AMIGOS`.`NOMBRE`, YEAR(CURDATE())-YEAR(`AMIGOS`.`F_NACIMIENTO`) + IF(DATE_FORMAT(CURDATE(),'%m-%d') > DATE_FORMAT(`AMIGOS`.`F_NACIMIENTO`,'%m-%d'), 0 , -1 ) AS `EDAD_ACTUAL` FROM `AMIGOS` WHERE `AMIGOS`.`NOMBRE`='PABLO' AND `AMIGOS`.`APELLIDO`='IGLESIAS';


Con lo que los resultados obtenidos el día 10-04-2008 fueron:

`AMIGOS`.`NOMBRE` `EDAD_ACTUAL`
PABLO 24


Y así es como en este pequeño tutorial hemos visto el uso de las funciones CURDATE(), DATE_FORMAT(FECHA, FORMATO) y YEAR(FECHA).

¿Quieres conocer otro trucos en MySQL? Aprende a gestionar bases de datos relacionales con MySQL o desarrolla problemas con juegos de caracteres - Illegal mix of collations.

 

Publicado originalmente el 21 de abril de 2019, actualizado el 10 de julio de 2021.

Política de privacidad

ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.

Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".

Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies