[firebase-br] Retornar a idade a partir da data de nascimento

Jorge Henrique jorgehenrique em americamoveis.com
Qui Mar 29 17:42:06 -03 2007


Eu tinha uma função em Delphi q sempre usei pra calculo de idades. Acho 
meio tosquinha mas resolve bem, converti ela para uma Stored Procedure e 
funcionou muito bem. Segue:

CREATE PROCEDURE IDADE(
     DATA_NASC DATE,
     DATA_BASE DATE)
RETURNS (
     ANOS INTEGER,
     MESES INTEGER,
     DIAS INTEGER,
     QT_DIAS INTEGER)
AS
BEGIN
   QT_DIAS=:DATA_BASE-:DATA_NASC;
   ANOS =0;
   MESES=0;
   DIAS =0;
   WHILE (:DATA_NASC<:DATA_BASE) DO
   BEGIN
     DATA_NASC=:DATA_NASC+1;
     IF (EXTRACT(DAY FROM :DATA_NASC)=EXTRACT(DAY FROM :DATA_BASE)) THEN
     BEGIN
       MESES=:MESES+1;
       DIAS=0;
     END ELSE BEGIN
       DIAS=:DIAS+1;
     END
     IF (:MESES=12) THEN
     BEGIN
       ANOS=:ANOS+1;
       MESES=0;
     END
   END
   SUSPEND;
END^

A SP retorna a idade em quantidade de Anos, meses e dias e tbm a 
quantidade de dias entre a data de nascimento e a data base. A data base 
pode ser a data atual ou qualquer outra que se queira achar a idade.

Exemplo de uso:

EXECUTE IDADE(CAST('12/06/1978' AS DATE), CURRENT_DATE);

Resultado:

ANOS: 28
MESES: 3
DIAS: 23

[]'s
Jorge Henrique


Cleidson Developer escreveu:
> Tentei sim,
> 
> tendo dois valores:
> 
> 31,1
> 30,8
> 
> ambos foram arredondados para 31.
> 
> 
> 
> Kleber Caneva escreveu:
>> Tentou CAST( ((current_date - pac_datanasc) / 365.16) as INTEGER) ?
>>
>> Se não me engano ele trunca o valor e não arredonda..
>>
>> []´s
>>
>> Kléber Caneva
>>
>>
>> ----- Original Message ----- 
>> From: "Cleidson Developer" <cleidson.developer em gmail.com>
>> To: <lista em firebase.com.br>
>> Sent: Thursday, March 29, 2007 2:57 PM
>> Subject: [firebase-br] Retornar a idade a partir da data de nascimento
>>
>>
>> Olá pessoal,
>>
>> Estou eu aqui novamente com mais uma dúvida:
>>
>> Gostaria de usar um select que me retornasse a idade em formato inteiro.
>>
>> Essa é a instrucao que estou usando:
>>
>> SELECT paciente_id, pac_nome,
>> pac_sexo, ((current_date - pac_datanasc) / 365.16) as
>> idade FROM PACIENTES ORDER BY PAC_NOME
>>
>>
>> Ta funcionando normal, só que a idade retornada nao é um numero inteiro.
>> Ela retorna algo como 31,2.
>>
>> As funcoes que tentei usar, arredondam o numero ao inves de apenas
>> ignorar a parte fracionaria. Se arredondasse só pra baixo, tudo bem, mas
>> se o numero for 31,91 será arredondado pra 32 ai vai dar problema.
>>
>>
>>
>> Gostaria de saber como obter no retorno apenas o numero inteiro.
>>
>> Quem puder me ajudar, agradeço. rs
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para editar sua configuração na lista, use o endereço 
>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>> Esta mensagem foi verificada pelo E-mail Protegido Terra.
>> Scan engine: McAfee VirusScan / Atualizado em 28/03/2007 / Versão: 
>> 5.1.00/4994
>> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>>
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 




Mais detalhes sobre a lista de discussão lista