Ich schreibe eine Abfrage, in der ich die Daten nur für das letzte Jahr abrufen muss. Was ist der beste Weg, dies zu tun?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
quelle
quelle
Ich habe diese Seite gefunden, als ich nach einer Lösung gesucht habe, mit der ich Ergebnisse aus einem früheren Kalenderjahr auswählen kann. Die meisten der oben gezeigten Ergebnisse scheinen Artikel aus den letzten 365 Tagen zurückzugeben, was bei mir nicht funktioniert hat.
Gleichzeitig gab es mir genug Anweisungen, um meine Bedürfnisse im folgenden Code zu lösen - den ich hier für alle anderen poste, die die gleichen Bedürfnisse wie ich haben und auf diese Seite bei der Suche nach einer Lösung stoßen könnten.
Vielen Dank an die oben genannten, deren Lösungen mir geholfen haben, das zu erreichen, was ich brauchte.
quelle
Nun, ich denke hier fehlt etwas. Der Benutzer möchte Daten aus dem letzten Jahr und nicht aus den letzten 365 Tagen erhalten. Es gibt einen großen Unterschied. Meiner Meinung nach sind Daten aus dem letzten Jahr alle Daten aus dem Jahr 2007 (wenn ich jetzt im Jahr 2008 bin). Die richtige Antwort wäre also:
Wenn Sie diese Abfrage einschränken möchten, können Sie einen anderen Filter hinzufügen, der jedoch immer im letzten Jahr sucht.
quelle
Suchen Sie in BOL nach dateadd
quelle
Das am besten lesbare, IMO:
Welche:
Es gibt Varianten mit DATEDIFF und DATEADD, mit denen Sie heute Mitternacht erreichen können, aber sie sind eher stumpf (obwohl sie etwas leistungsfähiger sind - nicht, dass Sie es im Vergleich zu den zum Abrufen der Daten erforderlichen Lesevorgängen bemerken würden).
quelle
GETDATE () gibt das aktuelle Datum und die aktuelle Uhrzeit zurück .
Wenn das letzte Jahr um Mitternacht des aktuellen Tages im letzten Jahr beginnt (wie im ursprünglichen Beispiel), sollten Sie Folgendes verwenden:
quelle
Die anderen Vorschläge sind gut, wenn Sie "nur SQL" haben.
Ich schlage jedoch vor, dass Sie - wenn möglich - das Datum in Ihrem Programm berechnen und es als Zeichenfolge in die SQL-Abfrage einfügen.
Zumindest für große Tabellen (dh mehrere Millionen Zeilen, möglicherweise kombiniert mit Verknüpfungen), die eine erhebliche Geschwindigkeitsverbesserung bewirken, da der Optimierer damit viel besser arbeiten kann.
quelle
Argument für die DATEADD-Funktion:
Datumsteil kann sein: yy, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
number ist ein Ausdruck, der in ein int aufgelöst werden kann, das einem Datumsteil des Datums hinzugefügt wird
Datum ist ein Ausdruck, der in einen Zeit-, Datums-, Smalldatetime-, Datetime-, Datetime2- oder Datetimeoffset-Wert aufgelöst werden kann.
quelle
quelle
Ich bin wie @DE White aus ähnlichen, aber anderen Gründen als die ursprüngliche Frage hierher gekommen. Die ursprüngliche Frage betrifft die letzten 365 Tage. @ samjudsons Antwort liefert das. Die Antwort von @DE White gibt Ergebnisse für das vorherige Kalenderjahr zurück.
Meine Abfrage ist insofern etwas anders, als sie für das Vorjahr bis einschließlich des aktuellen Datums funktioniert :
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Beispielsweise gibt diese Abfrage am 17. Februar 2017 Ergebnisse vom 1.1.2016 bis 17.02.2017 zurück
quelle
Ich hatte ein ähnliches Problem, aber der vorherige Codierer gab das Datum nur im Format MM-JJJJ an. Meine Lösung ist einfach, könnte sich aber für einige als hilfreich erweisen (ich wollte auch sicherstellen, dass Anfangs- und Endräume entfernt wurden):
quelle
Aus irgendeinem Grund hat keines der oben genannten Ergebnisse für mich funktioniert.
Dies wählt die letzten 365 Tage aus.
quelle