Microsoft SQL Server
Generowanie zakresu dat
Szukaj…
Parametry
Parametr | Detale |
---|---|
@Od daty | Uwzględniając dolną granicę wygenerowanego zakresu dat. |
@Spotykać się z kimś | Łączna górna granica wygenerowanego zakresu dat. |
Uwagi
Wydaje się, że większość ekspertów zaleca tworzenie tabeli Daty zamiast generowania sekwencji w locie. Zobacz http://dba.stackexchange.com/questions/86435/filling-in-date-holes-in-grouped-by-date-sql-data
Generowanie zakresu dat z rekurencyjnym CTE
Za pomocą rekurencyjnego CTE możesz wygenerować obejmujący zakres dat:
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)
Domyślne ustawienie MaxRecursion
to 100. Generowanie ponad 100 dat przy użyciu tej metody będzie wymagało segmentu Option (MaxRecursion N)
zapytania, gdzie N
jest pożądanym ustawieniem MaxRecursion
. Ustawienie tej wartości na 0
całkowicie MaxRecursion
ograniczenie MaxRecursion
.
Generowanie zakresu dat za pomocą tabeli podsumowań
Innym sposobem na wygenerowanie zakresu dat jest użycie Tabeli podsumowań do utworzenia dat między tymi zakresami:
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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow