Microsoft SQL Server
Een reeks datums genereren
Zoeken…
parameters
Parameter | Details |
---|---|
@Van datum | De inclusieve ondergrens van het gegenereerde datumbereik. |
@Uitgaan | De inclusieve bovengrens van het gegenereerde datumbereik. |
Opmerkingen
De meeste experts lijken aan te bevelen een datums-tabel te maken in plaats van een reeks direct te genereren. Zie http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Datumbereik genereren met recursieve CTE
Met behulp van een recursieve CTE kunt u een inclusief datumbereik genereren:
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)
De standaardinstelling MaxRecursion
is 100. Voor het genereren van meer dan 100 datums met deze methode is het segment Option (MaxRecursion N)
van de query vereist, waarbij N
de gewenste instelling voor MaxRecursion
is. Als u dit op 0
MaxRecursion
wordt de MaxRecursion
beperking volledig verwijderd.
Een datumbereik genereren met een tellingstabel
Een andere manier om een datumbereik te genereren, is door een tellingstabel te gebruiken om de datums tussen het bereik te maken:
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
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow