Puede parecer una tontería pero calcular la edad instantánea de una persona en MySQL puede ser algo que nos dé algunos quebraderos de cabeza.

Es una consulta típica si eres programador PHP y codificas aplicaciones web, o eres desarrollador WordPress o de cualquier otro CMS. Un ejemplo muy claro puede ser cuando muestras información de un usuario y tienes que calcular la edad instantánea, es decir, la que tiene en ese momento. Aquí hay que tener en cuenta la diferencia de años, si se ha sobrepasado el mes y día de nacimiento.

La solución que ponemos a continuación resuelve el problema al lanzar la consulta en MySQL sin necesidad de procesar el resultado desde PHP.

Por tanto tenemos una fecha de nacimiento, p.ej. 12-01-2012 y la fecha actual que se obtiene del típico now() en MySQL y queremos saber qué edad tiene en ese momento. La consulta sería:

select 
  date_format( now(), '%Y' ) - date_format( '2012-01-12', '%Y' ) -
  ( date_format( now(), '00-%m-%d') < date_format( '2012-01-12', '00-%m-%d' ) )
as 
  edad

La función date_format la utilizamos para eliminar alguna porción de la fecha, como el mes o el día. Esto es así porque now() nos devuelve la fecha y también la hora por eso es importante usar date_format.

Para utilizar esta consulta sobre una tabla de datos sólo tienes que sustituir la fecha de ejemplo que hemos puesto 2012-01-12 por el nombre de columna que contenga la fecha, por ejemplo fecha_nacimiento.

Un compañero de Linkedin, Carlos González Ruiz, ha aportado una solución mejor que la mía, más breve y más rápida, la pongo a continuación:

SELECT 
  FLOOR( (curdate() - 20120112 ) / 10000 )
AS 
  edad

Es importante que la fecha a comparar esté en formato numérico entero, sin guiones. La función curdate() de MySQL nos devuelve el resultado en formato numérico o cadena dependiendo del contexto en el que se esté utilizando.

Valora este contenido post
Valoración en Google
5.0
Basado en 73 opiniones
×
js_loader