Microsoft SQL Server
Generare un intervallo di date
Ricerca…
Parametri
Parametro | Dettagli |
---|---|
@FromDate | Il limite inferiore compreso dell'intervallo di date generato. |
@Ad oggi | Il limite superiore compreso dell'intervallo di date generato. |
Osservazioni
La maggior parte degli esperti consiglia di creare una tabella delle date invece di generare una sequenza al volo. Vedi http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Generazione dell'intervallo di date con CTE ricorsivo
Usando un CTE ricorsivo, puoi generare un intervallo di date inclusivo:
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)
L'impostazione MaxRecursion
predefinita è 100. Generando più di 100 date utilizzando questo metodo sarà necessario il segmento Option (MaxRecursion N)
della query, dove N
è l'impostazione MaxRecursion
desiderata. Impostando questo a 0
si rimuoverà del tutto la limitazione MaxRecursion
.
Generazione di un intervallo di date con una tabella di conteggio
Un altro modo per generare un intervallo di date consiste nell'utilizzare una tabella di riscontro per creare le date tra l'intervallo:
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow