SELECT
DATEFROMPARTS(YEAR(DATEADD(month,-1,GETDATE())),MONTH(DATEADD(month,-1,GETDATE())),1) AS StartOfLastMonth
,DATEADD(day,-1,(DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE()),1))) AS EndOfLastMonthAsDate
,DATEADD(day,-3,CAST(DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE()),1) AS DATETIME)) AS EndOfLastMonthMidngith
,CAST(DATEADD(month,-1,GETDATE()) AS DATE) AS OneMonthAgoStrartOfDay
,CAST(GETDATE() AS DATE) AS StartOfToday
,DATEADD(MS,-3,CAST(CAST(GETDATE() AS DATE) AS DATETIME)) AS MidnightLastNight
Gut Da die Menschen haben auf jeden Fall illustriert es viele verschiedene Antworten auf Ihre Fragen sind, und alle sind auf ähnliche Prämisse gebaut. mit DATEADD()
mit einer negativen Zahl, um einen Monat zurückzugehen. Oder um Monat und Jahr zu vergleichen, um zu sehen, ob sie gleich sind. Die erste wurde auf 1 Monat bis heute und die letzte auf letzten Monat ausgerichtet.
Alle bisherigen Antworten, erwarten @DasBlinkenLight und @TimBiegeleisen, berücksichtigen TIME
Komponente Ihrer Spalte und die GETDATE()
Funktion nicht, wenn Sie eine haben. Wenn Ihre Spalte ist, müssen Sie dies berücksichtigen. Die obige SELECT
Abfrage, die Sie mit einigen Möglichkeiten bewaffnet, um zu verschiedenen Daten zu gelangen, die ich vermute, wird Ihren Bedürfnissen entsprechen.
Soweit mit BETWEEN
mit Daten verwenden, seien Sie vorsichtig! Weil die Werte, die du eingibst, inklusive sind, also wenn du GETDATE()
auf die rechte Seite der zwischen-Anweisung legst, wirst du auch die heutigen Ergebnisse erhalten, aber du könntest UP TO bis heute wirklich wollen. In diesem Fall solltest du dein Argument auf der rechten Seite ändern. Auch bin ich nicht sicher über Oracle, MySQL, etc., aber Micrsofot SQL-Server ist genau auf .003
Millisekunden. Also, wenn Sie wirklich auf Mitternacht eines Datums schauen möchten, sollten Sie sich 23:59:59.997
ansehen, weil .998 und .999 auf den nächsten Tag runden werden.
Auch zur weiteren Vereinfachung, wenn Sie nicht wollen, Zeit Komponenten können Sie auch Ihre Spalte zu DATE
und es fällt im Wesentlichen die Zeit und die BETWEEN
, weil ein wenig auch klar, z. CAST(n.JOIN_DATE AS DATE)
Es gibt definitiv andere Fragen zu diesem Thema auf Stackoverflow ermutige ich Sie zu recherchieren.
Können Sie Ihre vollständige Abfrage anzeigen? –
Auch einige Beispieldaten wären nett. –
'MONTH()' gibt eine Monatszahl zurück. 'DATEADD()' gibt ein Datum zurück. Ein Monat wird niemals einem Datum gleichkommen. –