Microsoft SQL Server
Genererar ett antal datum
Sök…
parametrar
Parameter | detaljer |
---|---|
@Från datum | Den inkluderande nedre gränsen för det genererade datumintervallet. |
@ToDate | Den inkluderande övre gränsen för det genererade datumintervallet. |
Anmärkningar
De flesta experter verkar rekommendera att du skapar en datatabell istället för att generera en sekvens under resan. Se http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Generera datumintervall med rekursiv CTE
Med hjälp av en rekursiv CTE kan du generera ett inkluderande datumintervall:
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)
Standardinställningen MaxRecursion
är 100. Att generera mer än 100 datum med den här metoden kräver segmentet Option (MaxRecursion N)
i frågan, där N
är önskad inställning för MaxRecursion
. Om du ställer in detta till 0
tas MaxRecursion
begränsningen helt bort.
Generera ett datumintervall med en sammanställningstabell
Ett annat sätt du kan generera ett datumintervall är genom att använda en tallytabell för att skapa datum mellan intervallet:
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow