Tricks, um alle Daten zwischen zwei Daten in SQL Server abzurufen
In SQL Server ist das Abrufen aller Daten innerhalb eines bestimmten Datumsbereichs für Aufgaben wie Datenanalyse, Datumsverarbeitung und Datensatzspeicherung nützlich. In diesem Artikel werden verschiedene Methoden vorgestellt, um effizient eine Folge aufeinanderfolgender Daten zwischen zwei gegebenen Daten zu erhalten.
Verwenden Sie rekursive allgemeine Tabellenausdrücke (CTE)
Eine Möglichkeit besteht darin, rekursiven CTE zu verwenden. Ein Beispiel ist wie folgt:
<code class="language-sql">;with GetDates As ( select DATEADD(day,1,@maxDate) as TheDate UNION ALL select DATEADD(day,1, TheDate) from GetDates where TheDate < @minDate ) select TheDate from GetDates</code>
Dieser CTE eignet sich zwar für die Auswahl von Daten, wird jedoch aufgrund von Kompilierungsfehlern beim Versuch, die Ergebnisse in einem Cursor zu speichern, schwierig.
Alternative Methoden
Um die Effizienz zu steigern und den Betrieb zu vereinfachen, ziehen Sie die folgenden Alternativen in Betracht:
1. Datumstabelle verwenden
Wenn Sie vorab eine Datumstabelle erstellen, wird die Abfrage ganz einfach:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date <= @MaxDate;</code>
2. Datumssequenz ohne Datumstabelle generieren
Wenn Sie keine Datumstabelle haben, können Sie mit der folgenden Technik dynamisch eine Datumssequenz generieren:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;</code>
3. Vermeiden Sie die Verwendung von Cursorn für die Datumsiteration
Es wird generell empfohlen, die Verwendung von Cursorn für die Datumsiteration zu vermeiden. Sammlungsbasierte Ansätze sind im Allgemeinen effizienter und skalierbarer. Wenn Sie beispielsweise die Menge für ein bestimmtes Datum abrufen möchten, können Sie die folgende Abfrage verwenden:
<code class="language-sql">SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date = '20140101';</code>
Indem Sie die Verwendung von Cursorn vermeiden und diese alternativen Techniken nutzen, können Sie alle Datumsangaben innerhalb eines bestimmten Bereichs in SQL Server effizient abrufen.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Daten zwischen zwei Daten in SQL Server effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!