Microsoft SQL Server
日付の範囲を生成する
サーチ…
パラメーター
パラメータ | 詳細 |
---|---|
@FromDate | 生成された日付範囲の包括的な下限。 |
@現在まで | 生成された日付範囲の包括的な上限。 |
備考
ほとんどの専門家は、その場でシーケンスを生成するのではなく、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の生成、100の以上の日数であるOption (MaxRecursion N)
クエリのセグメント、 N
所望であるMaxRecursion
設定。これを0
設定すると、 MaxRecursion
制限が完全に削除されます。
タリー表を使用した日付範囲の生成
日付の範囲を生成する別の方法は、タリー表を使用して範囲の間の日付を作成することです。
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