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/