Microsoft SQL Server
Создание диапазона дат
Поиск…
параметры
параметр | подробности |
---|---|
@С даты | Инклюзивная нижняя граница сгенерированного диапазона дат. |
@На свидание | Включая верхнюю границу сгенерированного диапазона дат. |
замечания
Большинство экспертов, похоже, рекомендуют создавать таблицу Dates вместо генерации последовательности на лету. См. Http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Формирование диапазона дат с рекурсивным CTE
Используя рекурсивный CTE, вы можете создать инклюзивный диапазон дат:
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)
Значение по умолчанию MaxRecursion
равно 100. MaxRecursion
создания более 100 дат с использованием этого метода потребуется сегмент Option (MaxRecursion N)
запроса, где N
- желаемый параметр MaxRecursion
. Установка этого параметра на 0
устранит ограничение MaxRecursion
.
Создание диапазона дат с таблицей Tally
Другой способ, которым вы можете создать диапазон дат, заключается в использовании таблицы Tally для создания дат между диапазоном:
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow