Поиск…


параметры

параметр подробности
@С даты Инклюзивная нижняя граница сгенерированного диапазона дат.
@На свидание Включая верхнюю границу сгенерированного диапазона дат.

замечания

Большинство экспертов, похоже, рекомендуют создавать таблицу 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