Microsoft SQL Server
Datumsbereich generieren
Suche…
Parameter
Parameter | Einzelheiten |
---|---|
@Ab Datum | Die inklusive untere Grenze des generierten Datumsbereichs. |
@Miteinander ausgehen | Die inklusive obere Grenze des generierten Datumsbereichs. |
Bemerkungen
Die meisten Experten scheinen eine Dates-Tabelle zu erstellen, anstatt eine Sequenz zu erzeugen. Siehe http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Datumsbereich mit rekursivem CTE erzeugen
Mit einem rekursiven CTE können Sie einen inklusiven Datumsbereich generieren:
Declare @FromDate Date = '2014-04-21',
@ToDate Date = '2014-05-02'
;With DateCte (Date) As
(
Select @FromDate Union All
Select DateAdd(Day, 1, Date)
From DateCte
Where Date < @ToDate
)
Select Date
From DateCte
Option (MaxRecursion 0)
Die Standardeinstellung für MaxRecursion
ist 100. MaxRecursion
mit dieser Methode mehr als 100 Datumsangaben zu Option (MaxRecursion N)
, ist das Segment Option (MaxRecursion N)
der Abfrage erforderlich, wobei N
die gewünschte MaxRecursion
Einstellung ist. Wenn Sie diesen MaxRecursion
auf 0
wird die MaxRecursion
Einschränkung vollständig MaxRecursion
.
Generieren eines Datumsbereichs mit einer Zählungstabelle
Eine andere Möglichkeit, einen Datumsbereich zu generieren, besteht darin, eine Datumstabelle zu verwenden, um die Daten zwischen dem Bereich zu erstellen:
Declare @FromDate Date = '2014-04-21',
@ToDate Date = '2014-05-02'
;With
E1(N) As (Select 1 From (Values (1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) DT(N)),
E2(N) As (Select 1 From E1 A Cross Join E1 B),
E4(N) As (Select 1 From E2 A Cross Join E2 B),
E6(N) As (Select 1 From E4 A Cross Join E2 B),
Tally(N) As
(
Select Row_Number() Over (Order By (Select Null))
From E6
)
Select DateAdd(Day, N - 1, @FromDate) Date
From Tally
Where N <= DateDiff(Day, @FromDate, @ToDate) + 1