私の質問はこれMySQL に関する質問ですが、SQL Server を対象としています:
2 つの日付間の日数のリストを返す関数またはクエリはありますか? たとえば、ExplodeDates という関数があるとします。
SELECT ExplodeDates('2010-01-01', '2010-01-13');
これにより、次の値を持つ単一列のテーブルが返されます。
2010-01-01
2010-01-02
2010-01-03
2010-01-04
2010-01-05
2010-01-06
2010-01-07
2010-01-08
2010-01-09
2010-01-10
2010-01-11
2010-01-12
2010-01-13
ここではカレンダー/数字表が役立つかもしれないと思っています。
アップデート
提供された 3 つのコード回答を確認することにしました。実行結果 (バッチ全体の % として) は次のとおりです。
- ロブ・ファーリーの回答: 18%
- StingyJackの回答: 41%
- KMの答え: 41%
低い方が良い
私は Rob Farley の回答を採用しました。これが最も速かったからです。ただし、数表の解法 (KM と StingyJack の両方が回答で使用) は私のお気に入りです。Rob Farley の回答は 3 分の 2 の速さでした。
アップデート2
アリビアの答えはるかに簡潔です。承認された回答を変更しました。
ベストアンサー1
この数行は、SQL Server におけるこの質問に対する簡単な答えです。
WITH mycte AS
(
SELECT CAST('2011-01-01' AS DATETIME) DateValue
UNION ALL
SELECT DateValue + 1
FROM mycte
WHERE DateValue + 1 < '2021-12-31'
)
SELECT DateValue
FROM mycte
OPTION (MAXRECURSION 0)