Dieser Artikel demonstriert effiziente Techniken zum Erstellen eines Ergebnissatzes, der eine Folge von Datumsangaben innerhalb eines bestimmten Bereichs enthält, mithilfe von T-SQL. Wir werden Methoden zur Generierung dieser Datumsreihe untersuchen und uns dabei auf optimierte Ansätze konzentrieren.
Lassen Sie uns unsere Start- und Enddaten festlegen:
DECLARE @StartDate datetime = 'Mar 1 2009', @EndDate datetime = 'Aug 1 2009'
Eine einfache, aber weniger effiziente Methode verwendet eine WHILE
Schleife:
DECLARE @currentDate datetime SET @currentDate = @StartDate WHILE @currentDate <= @EndDate BEGIN SELECT @currentDate SET @currentDate = DATEADD(day, 1, @currentDate) END
Dieser iterative Ansatz funktioniert, kann jedoch bei großen Datumsbereichen langsam sein.
spt_values
(SQL Server 2005 und höher)Für eine verbesserte Leistung, insbesondere bei größeren Datumsbereichen, nutzen Sie die spt_values
Systemtabelle (verfügbar in SQL Server 2005 und späteren Versionen):
DECLARE @StartDate datetime, @EndDate datetime; SET @StartDate = GETDATE(); SET @EndDate = DATEADD(day, 100, @StartDate); SELECT DATEADD(day, number, @StartDate) AS DateValue FROM master..spt_values WHERE type = 'P' AND DATEADD(day, number, @StartDate) <= @EndDate;
Diese Abfrage generiert die Datumsreihe effizient, indem fortlaufende Zahlen von spt_values
bis zum Startdatum hinzugefügt und gefiltert werden, um nur Daten innerhalb des angegebenen Bereichs einzubeziehen. Diese Methode ist bei größeren Datensätzen deutlich schneller als der schleifenbasierte Ansatz. Die master..spt_values
-Tabelle bietet eine leicht verfügbare Zahlenfolge und eignet sich daher ideal für diese Aufgabe.
Das obige ist der detaillierte Inhalt vonWie kann ich in T-SQL effizient eine Datumsbereichs-Ergebnismenge generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!