Ver Mensaje Individual
  #8  
Antiguo 03-12-2011
[birmain] birmain is offline
Miembro Premium
 
Registrado: feb 2005
Ubicación: Albacete - España
Posts: 49
Reputación: 0
birmain Va por buen camino
Edad actual

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 ^ ; 



/******************************************************************************/
/***                           Stored Procedures                            ***/
/******************************************************************************/

CREATE PROCEDURE IUDF_EDAD (
    FECHANACIMIENTO DATE)
RETURNS (
    RESULTADO DECIMAL(15,4))
AS
BEGIN
  SUSPEND;
END^






SET TERM ; ^



/******************************************************************************/
/***                           Stored Procedures                            ***/
/******************************************************************************/


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 ; ^
Responder Con Cita