[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