Hola a todos, hoy os voy a explicar como podemos calcular la diferencia de años entre dos fechas en Oracle.
Algo habitual en nuestras base de datos es almacenar fechas y es posible que necesitemos calcular una diferencia de años, por ejemplo, la fecha de nacimiento de una persona o la antigüedad de un empleado en una empresa.
Partiendo de esta base de datos:
CREATE TABLE PERSONA ( NOMBRE VARCHAR2(20) PRIMARY KEY, FECHA_NAC DATE ); INSERT INTO PERSONA VALUES('FERNANDO', TO_DATE('05/02/1990', 'DD/MM/YYYY')); INSERT INTO PERSONA VALUES('MANUEL', TO_DATE('03/11/1992', 'DD/MM/YYYY')); INSERT INTO PERSONA VALUES('ALBERTO', TO_DATE('21/01/2001', 'DD/MM/YYYY')); INSERT INTO PERSONA VALUES('ALFREDO', TO_DATE('15/12/1981', 'DD/MM/YYYY')); INSERT INTO PERSONA VALUES('JESUS', TO_DATE('17/04/2005', 'DD/MM/YYYY')); INSERT INTO PERSONA VALUES('EDUARDO', TO_DATE('27/10/1960', 'DD/MM/YYYY'));
Para calcular los años entre la fecha de hoy y la fecha de nacimiento de la persona, usaremos la función month_between para calcular los meses entre dos fechas y después lo dividimos entre 12.
Como el resultado puede devolver un decimal, usaremos la función floor para redondear a la baja, por ejemplo, si el valor es 31,89 con floor es 31.
SELECT floor(months_between(SYSDATE, FECHA_NAC) /12) as edad FROM persona;
Este seria el resultado:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Hola, buenas tardes! Me gustaría saber qué se le podría agregar a ese query para calcular también los meses y días que tiene. No estoy segura de si lo siguiente sería correcto. Gracias!
floor(months_between(SYSDATE, FECHA_NAC)/12) años,
floor(mod(months_between(SYSDATE, FECHA_NAC),12)) meses,
floor(mod(months_between(SYSDATE, FECHA_NAC),7)) días // Aquí no me convence el 7 porque siento que sería más bien 30 por los días del mes, pero cómo saber si es un día de 30 o 31, o si se trata de febrero?