-- select * from fnt_obtener_edad('003-251082-0015W');
-- DROP FUNCTION fnt_obtener_edad(date);
CREATE OR REPLACE FUNCTION fnt_obtener_edad(num_cedula varchar)
RETURNS integer AS
$BODY$ 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;
fecha_nac date;
begin
if(length(num_cedula) = 16)then
fecha_nac = (substring(num_cedula, 9, 2) || substring(num_cedula, 7, 2) || substring(num_cedula, 5, 2))::date;
if(extract(year from fecha_nac) >= extract(year from current_date))then
fecha_nac = ((extract(year from fecha_nac) - 100)::varchar || to_char(fecha_nac, 'MMdd'))::date;
end if;
else
fecha_nac = null;
end if;
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;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
No hay comentarios:
Publicar un comentario