Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich eine Datumsreihe zwischen zwei gegebenen Daten in SQL Server?
Datumsbereich in SQL Server generieren
In SQL Server kann das Auffüllen eines Datumsbereichs zwischen zwei bestimmten Daten in einer Tabelle mithilfe mehrerer Methoden vereinfacht werden. Eine effiziente Methode besteht darin, eine Zahlentabelle oder Zähltabelle zu verwenden, um eine Reihe von Ganzzahlen zu generieren.
Basierend auf der Anforderung, die Tabelle mit Daten zwischen „01.09.2011“ und „10.10.2011“ zu füllen, kann die folgende Lösung implementiert werden:
<code class="language-sql">DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' SELECT DATEADD(DAY, nbr - 1, @StartDate) FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr FROM sys.columns c ) nbrs WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)</code>
Dieser Code generiert eine Liste mit ganzen Zahlen von 1 bis zur Differenz zwischen dem Startdatum und dem Enddatum. Indem von jeder ganzen Zahl 1 subtrahiert und zum Startdatum addiert wird, wird eine Tabelle mit Daten erstellt, die mit „2011-09-01“ beginnen und mit „2011-10-10“ enden.
Alternativ kann zur Vereinfachung der Berechnungen auch eine nullbasierte Zähltabelle verwendet werden:
<code class="language-sql">CREATE TABLE [dbo].[nbrs]( [nbr] [INT] NOT NULL ) ON [PRIMARY] INSERT INTO dbo.nbrs (nbr) SELECT nbr-1 FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr FROM sys.columns c ) nbrs DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' SELECT DATEADD(DAY, nbr, @StartDate) FROM nbrs WHERE nbr <= DATEDIFF(DAY, @StartDate, @EndDate)</code>
Durch die dauerhafte Speicherung einer Zahlentabelle in der Datenbank können Sie diese für zukünftige Abfragen wiederverwenden, wodurch Unterabfragen und Rekursionen überflüssig werden und Leistung und Effizienz gewährleistet werden.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Datumsreihe zwischen zwei gegebenen Daten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!