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