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.
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;
No hay comentarios.:
Publicar un comentario