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.

Sigue al día con nuestra newsletter

Indícanos los temas que más te interesan:

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