Heim > Datenbank > MySQL-Tutorial > Wie kann ich alle Daten zwischen zwei Daten in SQL Server effizient abrufen?

Wie kann ich alle Daten zwischen zwei Daten in SQL Server effizient abrufen?

Barbara Streisand
Freigeben: 2025-01-12 10:13:43
Original
691 Leute haben es durchsucht

How to Efficiently Retrieve All Dates Between Two Dates in SQL Server?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage