2010-03-25 17 views
5

Ich führe eine einfache DATEDIFF Abfrage, aber es scheint nicht die Tage richtig zu berechnen oder ich mache etwas falsch.SQL DATEDIFF Funktioniert nicht?

Wenn ich

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

laufen Was ist richtig. Wenn ich den Monat im ersten Datum auf Februar (02) ändere, bekomme ich etwas komisches.

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

Jetzt sollte es nicht 48 oder etwas sein?

Kann jemand sehen, was ich falsch mache oder ist das nicht die richtige Funktion zu verwenden, wenn ich die Anzahl der Tage zwischen diesen Daten möchte?

Ich habe ein Datum aus dem anderen versucht unter:

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

Jede Hilfe sehr geschätzt.

Dank J.

+0

@James - nein, es nicht mehr als 48 sein sollte ... Sie sollen das größere Datum als letzte Parameter setzen. Ansonsten ist das Ergebnis negativ. Vergiss das auch nicht. Siehe meine Antwort unten. – JonH

+0

Ich meinte 48 nicht genau "sollte es nicht 48 oder so sein" Ich habe gerade eine schnelle Berechnung in meinem Kopf gemacht. Danke für die Hilfe obwohl. – JBoom

Antwort

4

Sie fehlen Zitate

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

Sie bekommen 20, weil

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

2008 - 1988 = 20 
+0

oops was für ein plonker, wie habe ich das nicht bekommen .... danke für die Hilfe aber. – JBoom

1

Wenn Sie es auf diese Weise auszuführen:

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

du wirst sehen

1988 2008 

die Ergebnisse oder die Ganzzahloperationen, die Sie hier eingeben.

die Datumskonstanten in einzelne Anführungszeichen ein:

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

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

Das zweite Datum nimmt - erstes Datum. Vergiss nicht "".

1

Es funktioniert, wenn Sie Ihre Termine mit Apostroph umgeben -

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

-41