Microsoft SQL Server
Générer une plage de dates
Recherche…
Paramètres
Paramètre | Détails |
---|---|
@Partir de la date | La limite inférieure inclusive de la plage de dates générée. |
@À ce jour | La limite supérieure inclusive de la plage de dates générée. |
Remarques
La plupart des experts semblent recommander de créer une table Dates au lieu de générer une séquence à la volée. Voir http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Génération de la plage de dates avec le CTE récursif
En utilisant un CTE récursif, vous pouvez générer une plage de dates incluse:
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)
Le paramètre MaxRecursion
par défaut est 100. La génération de plus de 100 dates à l'aide de cette méthode nécessite le segment Option (MaxRecursion N)
de la requête, où N
correspond au paramètre MaxRecursion
souhaité. MaxRecursion
cette valeur sur 0
, la limitation MaxRecursion
sera entièrement MaxRecursion
.
Génération d'une plage de dates avec une table de contrôle
Une autre façon de générer une plage de dates consiste à utiliser une table de correspondance pour créer les dates entre les plages:
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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow