Cita:
Iniciado por mauriciolangea Descripción : ¿Cómo calculo la edad desde un campo fecha en Firebird?
Respuesta:
Asumiendo que la tabla1 contiene un campo tipo fecha con la información de la fecha de nacimiento ...
SELECT EXTRACT(YEAR FROM current_date) - EXTRACT(YEAR FROM campo_fecha)
- CASE WHEN EXTRACT(MONTH FROM current_date) > EXTRACT(MONTH FROM campo_fecha)
THEN 0
ELSE
CASE WHEN EXTRACT(MONTH FROM current_date)
< EXTRACT(MONTH FROM campo_fecha)
THEN 1
ELSE
CASE WHEN EXTRACT(DAY FROM current_date)
< EXTRACT(DAY FROM campo_fecha)
THEN 1
ELSE 0
END
END
END as edad
FROM tabla1
o más sencillo
SELECT CAST((CURRENT_DATE-campo_fecha)/365.25 AS INTEGER) FROM tabla1
Nota : Este script no calcula la edad con meses ni en meses
A tener la necesidad de tener un procedimiento más exacto, llegué a hacer este sencillo Procedimiento Almacenado.
Código:
SET TERM ^ ;
CREATE PROCEDURE CALCULA_EDAD (
FECHA_NACIMIENTO Date,
FECHA_HOY Date )
RETURNS (
EDAD Varchar(60),
EDAD_ANO Integer,
EDAD_MES Integer,
EDAD_DIA Integer )
AS
DECLARE VARIABLE jar integer;
DECLARE VARIABLE monat integer;
DECLARE VARIABLE dag integer;
DECLARE VARIABLE ald date;
DECLARE VARIABLE edadan varchar(30);
DECLARE VARIABLE edadme varchar(30);
DECLARE VARIABLE edaddi varchar(30);
BEGIN
jar = extract(year from FECHA_HOY) - extract(year from FECHA_NACIMIENTO);
monat = extract(month from FECHA_HOY) - extract(month from FECHA_NACIMIENTO);
dag = extract(day from FECHA_HOY) - extract(day from FECHA_NACIMIENTO);
if (dag < 0) then
begin
dag = 30 - abs(dag);
monat = monat - 1;
end
if (monat < 0) then
begin
monat = 12 - abs(monat);
jar = jar - 1;
end
--Arreglo cadena para presentación
if (jar > 0) then
if (jar = 1) then
edadan = jar||' Año ';
else
edadan = jar||' Años ';
else
if (jar = 0) then
edadan = '';
if (monat > 0) Then
if (monat = 1) then
edadme = monat||' Mes ';
else
edadme = monat||' Meses ';
else
if (monat = 0) then
edadme = '';
if (dag > 0) then
if (dag = 1) then
edaddi = dag||' Día ';
else
edaddi = dag||' Días ';
else
if (dag = 0) Then
edaddi = '';
edad_ano = jar;
edad_mes = monat;
edad_dia = dag;
edad = edadan||edadme||edaddi;
suspend;
END^
SET TERM ; ^