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