Microsoft SQL Server
Generando un rango de fechas
Buscar..
Parámetros
Parámetro | Detalles |
---|---|
@Partir de la fecha | El límite inferior inclusivo del intervalo de fechas generado. |
@Hasta la fecha | El límite superior inclusivo del rango de fechas generado. |
Observaciones
La mayoría de los expertos parecen recomendar la creación de una tabla de fechas en lugar de generar una secuencia sobre la marcha. Consulte http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Generando intervalo de fechas con CTE recursivo
Usando un CTE recursivo, puede generar un rango de fechas 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)
La configuración predeterminada de MaxRecursion
es 100. Generar más de 100 fechas usando este método requerirá el segmento Option (MaxRecursion N)
de la consulta, donde N
es la configuración deseada de MaxRecursion
. Establecer esto en 0
eliminará la limitación de MaxRecursion
completo.
Generando un intervalo de fechas con una tabla de conteo
Otra forma de generar un rango de fechas es mediante la utilización de una Tabla de Tally para crear las fechas entre el rango:
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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow