2017-05-25 4 views
-1

Ich versuche, Daten für den vorherigen vollen Monat abzurufen, aber die Daten des letzten Tages werden nicht abgerufen.Letztes Datum des letzten Monats abrufen Transact-SQL

Ausgabe: Vorheriger Monat ist April und diese Bedingung ruft Daten nur bis zum 29. April ab. Daten für den 30. April fehlen.

Kann mir bitte jemand helfen, dies zu korrigieren.

OLH.DateStamp > CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0),101) 
And 
OLH.DateStamp < CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1),101)) 

Vielen Dank im Voraus

+0

Wenn Ihre Werte * Zeit * umfassen, es ist in der Regel besser, eine * exklusiv zu berechnen * Endpunkt (z. B. der erste des aktuellen Monats) und verwenden Sie im Vergleich ein '<' anstelle von '<='. –

+0

Mögliches Duplikat von [SQL Query, um den letzten Tag des Monats zu finden] (https://stackoverflow.com/questions/16646585/sql-query-to-find-the-last-day-of-the-month) –

Antwort

1

Der einfachste Weg, um Daten für den vorherigen Monat zu bekommen ist:

DATEDIFF(month, OLH.DateStamp, GETDATE()) = 1 

jedoch, dass kein Indizes nicht verwendet. Also, eine bessere Methode ist:

OLH.DateStamp >= DATEADD(MONTH, -1, DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE))) AND 
OLH.DateStamp < DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE)) 

Der Ausdruck:

DATEADD(DAY, 1 - DAY(GETDATE), CAST(GETDATE() as DATE)) 

kehrt Mitternacht am ersten Tag des laufenden Monats.

+0

Vielen Dank @Gordon Linoff. Lass mich es versuchen. – wahab

1

sollten Sie versuchen, den letzten Tag des Monats <= OLH.Datestamp sein sollte

, um die gewünschte Ausgabe erhalten Sie suchen:

--Use It In Where Clause 
DECLARE @FirstDayOfLastMonth 
     DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(DATEADD(m, -1, GETDATE() - 
     2))), DATEADD(m, -1, GETDATE() - 1))) 
,@LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(GETDATE())), GETDATE())) 

OLH.DateStamp >= CONVERT(VARCHAR, @FirstDayOfLastMonth , 101) AND 
OLH.DateStamp <= CONVERT(VARCHAR, @LastDayOfLastMonth , 101) 
+0

versuchte die obige Lösung, aber ich kann immer noch keine Aufzeichnungen für den 30. April bekommen. – wahab

Verwandte Themen