-- select * from fnt_obtener_edad('1986-11-29');
create or replace function fnt_obtener_edad(fecha_nac date)
returns integer as $$
declare
-- Datos de la fecha de nacimiento
ano_nac integer;
mes_nac integer;
dia_nac integer;
-- Datos de la fecha actual
ano_act integer;
mes_act integer;
dia_act integer;
edad integer;
b boolean;
begin
ano_act = extract(year from getdate());
mes_act = extract(month from getdate());
dia_act = extract(day from getdate());
ano_nac = extract(year from fecha_nac);
mes_nac = extract(month from fecha_nac);
dia_nac = extract(day from fecha_nac);
edad = ano_act - ano_nac;
if(mes_act > mes_nac)then
b = true;
else
b = false;
end if;
if(mes_act = mes_nac)then
if(dia_act >= dia_nac)then
b = true;
else
b = false;
end if;
end if;
if(b = true)then
edad = edad;
else
edad = edad - 1;
end if;
return edad;
end;
$$ language plpgsql;
Que pasa si el mes actual es mayor al mes de nacimiento, se supone que la edad debe quedar como edad, sin embargo si el dia actual es menor al dia de nacimiento, la funcion falla ya que le resta uno. Creo que se debe separar el and del dia en el condicional.
ResponderEliminarGracias por tus observaciones, ya fue corregido. :D
Eliminar