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

This post was written by admin on January 8, 2009
Posted Under: Bases de Datos

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 ocurrrió hacerme una pequeña herramienta web para poder 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:

COMO 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





En este pequeño tutorial hemos visto el uso de las funciones CURDATE(), DATE_FORMAT(FECHA, FORMATO) y YEAR(FECHA)

Add a Comment

required, use real name
required, will not be published
optional, your blog address