13 de noviembre de 2020

Calcular edad en MySQL

Calculo de la edad con fecha implícita

Para calcular la edad actual en MySQL a partir de otro campo como; la fecha de nacimiento, RFC o cualquier otro dato que lo contenga implícitamente, podemos utilizar algunas funciones.

MySQL utiliza diferentes tipos de datos para almacenar la información; por lo que se debe revisar que tipo de dato es el utilizado para almacenar la información y de ser necesario hacer la conversión.
El tipo de dato DATE en MySQL sigue el siguiente formato AAAA-MM-DD, por lo que si tiene otro orden, es necesario; reacomodar la fecha.

Para mostrar el proceso más claramente utilizare una tabla de ejemplo donde hay un campo que cuenta con la fecha implícita, en forma análoga al RFC, cuatro letras seguidas de 3 pares de números que indican el AA-MM-DD, y un par de caracteres al final.

edad_implicita
ID cadena_fecha_implicita algun_otro_dato
int varchar varchar
1 LARA901212SG Estos datos
2 LUIS950123QW son ficticios
3 IVAN650430ER para el
4 LORE120621P7 ejemplo
5 YULI090628YO del calculo
6 HOLA001011HI de la edad
7 ROJA88111145 desde el
8 AZUL990913S4 RFC o CURP



La tabla anterior tiene un campo con la fecha implícita que comienza a partir del 5o carácter y tiene 6 dígitos, por lo que se puede extraer únicamente estos caracteres (una subcadena de una cadena) con alguna de las funciones equivalentes SUBSTR(), MID() o SUBSTRING(), indicando el campo, la posición de inicio y la cantidad de caracteres a extraer.

SELECT SUBSTRING(cadena_fecha_implicita,5,6) AS 'cadena de fecha'
FROM edad_implicita;

Ahora con la función STR_TO_DATE() devuelve una fecha con la cadena obtenida previamente y su formato de fecha basado en la combinación de ciertos valores.

SELECT STR_TO_DATE(SUBSTRING(cadena_fecha_implicita,5,6),"%y %m %d")
AS 'cambiando el tipo de dato'
FROM edad_implicita;
Cabe aclarar que esta función corrige el orden de la fecha al formato AAAA-MM-DD, correspondiente al tipo DATE de MySQL de la cadena de texto indicada. Además debe considerar el formato de fecha corta para el año, por ejemplo 65 es interpretado como: 2065 en vez de 1965.

Por otra parte la función CURRENT_DATE() o CURDATE() devuelve la fecha actual.

SELECT CURDATE();
Recuerde que el formato de salida es AAAA-MM-DD, por lo que para poder realizar operaciones entre fechas deben tener el mismo tipo. Si desea mostrar un formato de salida diferente puede utilizar la función DATE_FORMAT("DATE","valores de formato"), indicando la fecha, seguido de la combinación de valores de formato .

La función TIMESTAMPDIFF() devuelve la diferencia entre dos fechas o fechas-hora, indicando como parámetro la unidad de tiempo a devolver (YEAR, MONTH, MINUTE). Por lo que se restara la fecha actual de la fecha de nacimiento, para obtener la edad, anidando las funciones anteriores.

SELECT TIMESTAMPDIFF
(YEAR, STR_TO_DATE(SUBSTRING(cadena_fecha_implicita,5,6),"%y %m %d"),
CURDATE()) AS 'Edad actual'
FROM edad_implicita;

 

Resultado de la consulta; agregando todas las columnas (*) de la tabla, más la calculada.

No hay comentarios.: