Calcular idade numa Procedure

Firebird

19/09/2003

Alguem sabe como eu faço pra calcular idade em anos, de alguem, numa stored procedure, tendo a data de nascimento e a data atual?


Rafael_sangalli

Rafael_sangalli

Curtidas 0

Respostas

Tio Frank

Tio Frank

19/09/2003

CARA EU USO ESSA AQUI ... DIRETO NO DELPHI ... PROVAVLEMENTE VC USA DELPHI TB NÉ ... VE SE CONSEGUE ALGUMA COISA ... QUALQUER COISA MANDA AÍ ... Q A GNT VÊ O Q FAZ ... BLZ


VAR
varIDADE: INTEGER;
DIA1, DIA2, MES1, MES2, ANO1, ANO2: WORD;
BEGIN
IF DT_NASC.TEXT <> ´ / / ´ THEN
BEGIN
DECODEDATE(DATE, ANO1, MES1, DIA1);
DECODEDATE(DT_NASC.DATE, ANO2, MES2, DIA2);
varIDADE := ANO1 - ANO2;
IF MES2 < MES1 THEN
IDADE.TEXT := INTTOSTR(varIDADE)
ELSE
BEGIN
IF ((MES2 = MES1) AND (DIA2 <= DIA1)) THEN
IDADE.TEXT := INTTOSTR(varIDADE)
ELSE
IDADE.TEXT := INTTOSTR(varIDADE - 1);
END;
END;
end;


GOSTEI 0
Rafael_sangalli

Rafael_sangalli

19/09/2003

Valeu pela ajuda, mas ainda num deu muito certo, o problema eh q eu realmente preciso fazer a conversão dentro da stored procedure - eh a unica forma q dah certo, estou tentando de tudo aki ainda naum deu certo, agradeço qq ajua


GOSTEI 0
Afarias

Afarias

19/09/2003

set term ^;

create procedure pr_idade_clientes returns (nome varchar(30), idade integer) as
declare variable AnoNasc Integer;
declare variable MesNasc Integer;
declare variable DiaNasc Integer;
declare variable Ano Integer;
declare variable Mes Integer;
declare variable Dia Integer;
declare variable vDataNasc Date;
begin
Ano = extract(year from current_date);
Mes = extract(month from current_date);
Dia = extract(day from current_date);
for select Nome, DataNasc from Clientes into :Nome, :vDataNasc do
begin
AnoNasc = extract(year from vDataNasc);
MesNasc = extract(month from vDataNasc);
DiaNasc = extract(day from vDataNasc);
Idade = Ano - AnoNasc;
if ((MesNasc < Mes) or ((MesNasc = Mes) and (DiaNasc < Dia))) then
Idade = Idade - 1;
suspend;
end
end^


<< é uma idéia >>

T+


GOSTEI 0
Rafael_sangalli

Rafael_sangalli

19/09/2003

Valeu, funcionou legal!!!


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

19/09/2003

Uma pequena correçãozinha, quando calculava idade em que o aniversário ainda não tinha ocorrido no ano...

set term ^; 

create procedure pr_idade_clientes returns (nome varchar(30), idade integer) as 
declare variable AnoNasc Integer; 
declare variable MesNasc Integer; 
declare variable DiaNasc Integer; 
declare variable Ano Integer; 
declare variable Mes Integer; 
declare variable Dia Integer; 
declare variable vDataNasc Date; 
begin 
  Ano = extract(year from current_date); 
  Mes = extract(month from current_date); 
  Dia = extract(day from current_date); 
  for select Nome, DataNasc from Clientes into :Nome, :vDataNasc do 
  begin 
    AnoNasc = extract(year from vDataNasc); 
    MesNasc = extract(month from vDataNasc); 
    DiaNasc = extract(day from vDataNasc); 
    Idade = Ano - AnoNasc; 
    if ((Mes< MesNasc) or ((MesNasc = Mes) and (Dia < DiaNasc))) then 
        Idade = Idade - 1; 
    suspend; 
    end 
end^ 


Valeu


GOSTEI 0
POSTAR