Datumssequenz innerhalb des angegebenen Bereichs generieren
Frage:
Wie kann ich alle Daten in einem bestimmten Bereich effizient abrufen und in einem Cursor speichern?
Lösung:
Datumstabelle verwenden
Datumstabellen bieten eine einfache und unkomplizierte Möglichkeit, Daten abzurufen. Falls verfügbar, verwenden Sie eine Abfrage wie:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date < @MaxDate;</code>
Sequenz dynamisch generieren
Wenn Sie keine Datumstabelle haben, können Sie die folgende Abfrage verwenden, um eine Datumssequenz zu 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>
Vermeiden Sie die Verwendung von Cursorn
Um die Leistung zu verbessern, sollten Sie die Verwendung einer sammlungsbasierten Alternative anstelle von Cursorn in Betracht ziehen. Um beispielsweise Mengen für einen bestimmten Artikel und ein bestimmtes Datum abzurufen:
<code class="language-sql">DECLARE @ToDate DATE = '20140428'; SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date <= @ToDate ORDER BY Date DESC;</code>
Das obige ist der detaillierte Inhalt vonWie kann eine Datumsfolge innerhalb eines bestimmten Bereichs effizient generiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!