Se um dos resultados deu 45, tá na cara que o retorno de DATEDIFF() é float. 
Não é exato pq a quantidade real de dias e horas que um ano possui não é 
exatamente 365, e sim 365.25. Até no próprio Delphi o tipo TDateTime é 
declarado como um double(vide help do Delphi).

Mas pq 365.25 dias? Muito simples! Se formos nos recordar das aulas de 
geografia, um ano corresponde a quantidade de dias que a Terra da uma volta 
completa ao redor do sol. Só que não são necessariamente 365 dias, e sim 365 
dias e 6 horas (6 horas = 0.25 dia). Por isso que a cada quatro anos, essas 6 
horas são acumuladas (4 x 6 = 24 horas = 1 dia) para gerar o dia 29 de 
Fevereiro, o famoso ano bissexto.

O outro motivo para que uma data seja representada como float é tb pelo fato 
deste mesmo tipo de dados ser usado para representar horas. Ou seja, um 
determinado período no tempo pode ser representado em um double contendo data e 
hora.

Por isso que é feito o CAST no resultado para um valor inteiro. No momento da 
conversão, é perfeitamente natural e até aceitável que o valor seja arredondado.

Sds.



________________________________

To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Tue, 5 Feb 2008 13:29:38 -0200
Subject: Re: [delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? 
interessante...







Flavio,

Faça um Cast para integer...

SELECT Cast(DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado: 22

SELECT cast(2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado ????

[ ]´s
Moacir

Flavio escreveu:
> Olá pessoal, bom dia,
>
> esses dias me apareceu uma grande pulga fazendo a festa atrás da minha 
> orelha. Resolvi colocar no comando SQL:
>
> ----------------------------------------------------------
> SELECT DATEDIFF(DAY,'1984/05/21','2007/04/01')/365
>
> Resultado: 22
>
> ...e depois assim:
>
> SELECT 2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365
>
> Resultado: 45
> ----------------------------------------------------------
>
> Como assim? 2 * 22 = 45 ???
>
> Alguém tem uma explicação para esse furo da matemática???
>
>
> Obrigado pela atenção.
> Flávio.
>
>
> ---------------------------------
> Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
> armazenamento!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
>








_________________________________________________________________
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Responder a