SQL Datediff não está funcionando?
Pergunta
Estou executando uma consulta simples do datediff, mas não parece calcular os dias corretamente ou estou fazendo algo errado.
Se eu correr
PRINT DATEDIFF(Day, 2010-01-20, 2010-01-01)
RETURN 19
Qual é correto. Se eu mudar o mês no primeiro encontro para fevereiro (02), recebo algo estranho.
PRINT DATEDIFF(Day, 2010-02-20, 2010-01-01)
RETURN 20
Agora não deveria ser 48 ou algo assim?
Alguém pode ver o que estou fazendo de errado ou essa não é a função correta a usar se eu quiser o número de dias entre essas datas?
Eu tentei tirar um encontro do outro:
PRINT (2010-02-20) - (2010-01-01)
RETURN -20
Qualquer ajuda muito apreciada.
Obrigado J.
Solução
Você está faltando as citações
PRINT DATEDIFF(Day, '2010-01-01', '2010-02-20')
Você está recebendo 20 porque
2010 - 1 - 1 = 2008
2010 - 2 - 20 = 1988
2008 - 1988 = 20
Outras dicas
Se você correr desta maneira:
SELECT 2010-02-20, 2010-01-01
você verá
1988 2008
quais são os resultados ou as operações inteiras que você coloca aqui.
Inclua as constantes de data em citações únicas:
SELECT DATEDIFF(Day, '2010-02-20', '2010-01-01')
--
-50
Funciona se você cercar suas datas com apóstrofos -
SELECT DATEDIFF(day, '2010-02-20', '2010-01-10')
-41
PRINT DATEDIFF(Day, '2010-01-10', '2010-02-20')
Isso leva a 2ª data - primeira data. Não se esqueça ''.