EDAD EXACTA EN AÑOS, MESES Y DÍAS – ORACLE PLSQL

Hoy tengo en mente volver a retomar el blog, que lleva ya, mucho tiempo abandonado. Así que empezaré con una entrada de algo que puede resultar muy útil.

En oportunidades por requerimientos de negocios en nuestros aplicativos siempre es necesario conocer la edad exacta de una persona a partir de su fecha de nacimiento, en valores de años, meses y días.

Para esto podemos hacer uso de las funciones de fecha que Oracle posee. Basándonos en la función months_between que devuelve los meses entre dos fechas como un número entero y de ser el caso con su parte fraccional.

Considerando esto, los años serían la parte entera del resultado de dividir los meses para 12. La cantidad de meses sería igual al residuo entero de la división anterior. Y los días… bueno considerando que el resultado de la resta de dos fechas (date) en Oracle siempre será dada en días, si sumamos el número entero de meses a la fecha de nacimiento y la restamos a la fecha de cálculo obtendremos un valor numérico que representa los días.

A continuación un ejemplo mucho más claro en código PLSQL:

declare
f_nacimiento date; --fecha de nacimiento de la persona
f_calculo date; --fecha a la cual deseamos saber su edad
--var respuesta:
anios number;
meses number;
dias number;
--
solo_meses number;
begin
--datos iniciales
f_nacimiento := to_date('1989/06/03', 'yyyy/mm/dd');
f_calculo := to_date('2016/07/29', 'yyyy/mm/dd');

--todo a meses
solo_meses := months_between(f_calculo, f_nacimiento);
--
anios := trunc(solo_meses / 12);
meses := trunc(mod(solo_meses, 12));
dias := f_calculo - add_months(f_nacimiento, trunc(solo_meses));
--
dbms_output.put_line('Usted tiene : ' || anios || ' año(s) con ' ||
meses || ' mes(es) y ' || dias || ' dia(s)');
end;</pre>
<pre>

Y su resultado luego de la ejecución en un test:

resultado
Saludos,