2010-03-25 5 views
5

Je cours une simple requête DATEDIFF mais il ne semble pas calculer les jours correctement ou je fais quelque chose de mal.SQL DATEDIFF Ne fonctionne pas?

Si je lance

PRINT DATEDIFF(Day, 2010-01-20, 2010-01-01) 
RETURN 19 

Ce qui est correct. Si je change le mois de la première date à février (02), je reçois quelque chose d'étrange.

PRINT DATEDIFF(Day, 2010-02-20, 2010-01-01) 
RETURN 20 

Maintenant, ne devrait-il pas être 48 ou quelque chose?

Quelqu'un peut-il voir ce que je fais mal ou n'est-ce pas la bonne fonction à utiliser si je veux le No de jours entre ces dates?

J'ai essayé de prendre une date à partir de l'autre:

PRINT (2010-02-20) - (2010-01-01) 
RETURN -20 

Toute aide très appréciée.

Merci J.

+0

@ James - Non, il ne devrait pas être 48 ... vous êtes censé mettre la date plus que le dernier paramètre. Sinon, le résultat est négatif. Ne pas oublier le '' non plus. Voir ma réponse ci-dessous. – JonH

+0

Je ne voulais pas dire exactement 48 "ne devrait-il pas être 48 ou quelque chose" je viens de faire un calcul rapide dans ma tête. Merci pour l'aide cependant. – JBoom

Répondre

4

Il vous manque des citations

PRINT DATEDIFF(Day, '2010-01-01', '2010-02-20') 

Vous obtenez 20 parce que

2010 - 1 - 1 = 2008 
2010 - 2 - 20 = 1988 

2008 - 1988 = 20 
+0

Oups ce qu'un plonker, comment je n'ai pas obtenu cela .... merci pour l'aide cependant. – JBoom

1

Si vous exécutez cette façon:

SELECT 2010-02-20, 2010-01-01 

vous verrez

1988 2008 

qui sont des résultats ou les opérations entières que vous placez ici.

Enfermez les constantes de date dans des guillemets simples:

SELECT DATEDIFF(Day, '2010-02-20', '2010-01-01') 

-- 
-50 
1
PRINT DATEDIFF(Day, '2010-01-10', '2010-02-20') 

Ce prend 2ème jour - première date. N'oublie pas ''.

1

Il fonctionne si vous entourez vos dates avec apostrophes -

SELECT DATEDIFF(day, '2010-02-20', '2010-01-10') 

-41