web-dev-qa-db-ja.com

日付のリストを生成する方法---過去2年間の毎日?

ビジネスインテリジェンスシステムを使用しており、日付のリストをロードして、「先週」または「過去12か月」または何らかの動的な値としてフラグを立てることができます。

文字列 '2014-01-01'から現在の日付までのすべての日付(1つの列に日付をリストするだけのテーブルを仮想的に生成する最も簡単な方法は何でしょうか(他の列はそこから数式を使用できます)。実際には、1年間の将来の日付を追加することもおそらく役立つでしょう。

さて、私は何千ものエントリを持つ別のランダムファクトテーブルから異なる日付を取得できますが、それはずさんなようで、実際には存在しないはずの依存関係を作成しています。

3
user45867

純粋なT-SQLを使用すると、次のことができます。

_;WITH cte AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor]
  FROM   [master].[sys].[columns] sc1
  CROSS JOIN [master].[sys].[columns] sc2
)
SELECT DATEADD(DAY, cte.[Incrementor], '2014-01-01')
FROM   cte
WHERE  DATEADD(DAY, cte.[Incrementor], '2014-01-01') < GETDATE();
_

または、これを少し簡単にするSQLCLR関数も作成しました。これは、無料バージョンの SQL# ライブラリで使用できます。

_SELECT [DatetimeVal]
FROM   [SQL#].[Util_GenerateDateTimeRange]('2014-01-01', GETDATE(), 1, N'day');
_

終了日を将来の日付にしたい場合は、どちらかのクエリでGETDATE()を置き換えます。

4
Solomon Rutzky

これを試して。

https://stackoverflow.com/questions/1378593/get-a-list-of-dates-between-two-dates-using-a-function/1378788#1378788

別のテーブルは必要ありませんが、持っている場合は役立ちます。

0
Rob Farley