Calcular idade numa Procedure
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
Curtidas 0
Respostas
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;
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
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
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+
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
19/09/2003
Valeu, funcionou legal!!!
GOSTEI 0
Powerlog Tecnologia
19/09/2003
Uma pequena correçãozinha, quando calculava idade em que o aniversário ainda não tinha ocorrido no ano...
Valeu
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