Calcula la edad de una persona tal y como está convenido socialmente. (Hasta el cumpleaños no se incrementa la edad)
Código SQL
[-]
SET NAMES ISO8859_1;
SET CLIENTLIB 'C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll';
CONNECT 'cadena de conexion' USER 'SYSDBA' PASSWORD 'masterkey';
SET TERM ^ ;
CREATE PROCEDURE IUDF_EDAD (
FECHANACIMIENTO DATE)
RETURNS (
RESULTADO DECIMAL(15,4))
AS
BEGIN
SUSPEND;
END^
SET TERM ; ^
SET TERM ^ ;
ALTER PROCEDURE IUDF_EDAD (
FECHANACIMIENTO DATE)
RETURNS (
RESULTADO DECIMAL(15,4))
AS
declare variable bisiestos float;
declare variable anionacimiento integer;
declare variable anioactual integer;
declare variable dias_diferencia float;
begin
anionacimiento = extract(year from fechanacimiento);
anioactual = extract(year from current_date);
bisiestos = 0;
while (anionacimiento <= anioactual) do
begin
if ((mod(anionacimiento, 100)= 0) or
(mod(anionacimiento, 400)= 0) or
(mod(anionacimiento, 4)= 0)) then bisiestos = bisiestos + 1;
anionacimiento = anionacimiento + 1;
end
dias_diferencia = datediff(day, fechanacimiento, current_date);
resultado = (dias_diferencia - bisiestos)/365;
resultado = floor(resultado);
suspend;
end^
SET TERM ; ^