これで2日間のすべての日を取得できます。私は、このテーブル内のすべての開始日と終了日の間のすべての日を見つける必要がある、と予想される結果は、次のようにする必要がありセットベースのアプローチで、複数の日付を複数の日付の間に印刷する
-----------------------------------------------------------
| ID | StartDate | EndDate |
-----------------------------------------------------------
| 1 | 2017-05-12 00:00:00.000 | 2017-05-15 00:00:00.000 |
| 2 | 2018-08-10 00:00:00.000 | 2018-08-13 00:00:00.000 |
| 3 | 2019-02-12 00:00:00.000 | 2019-02-13 00:00:00.000 |
-----------------------------------------------------------
:
DECLARE @MinDate DATE = '20140101' ,
@MaxDate DATE = '20140106';
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY a.object_id) - 1, @MinDate)
FROM
sys.all_objects a
CROSS JOIN
sys.all_objects b
は今、私はこのような結果セットを得ました:
---------------------------
| AllDates |
---------------------------
| 2017-05-12 00:00:00.000 |
| 2017-05-13 00:00:00.000 |
| 2017-05-14 00:00:00.000 |
| 2017-05-15 00:00:00.000 |
| 2018-08-10 00:00:00.000 |
| 2018-08-11 00:00:00.000 |
| 2018-08-12 00:00:00.000 |
| 2018-08-13 00:00:00.000 |
| 2019-02-12 00:00:00.000 |
| 2019-02-13 00:00:00.000 |
---------------------------
SQL Serverでユーザー定義関数を使用しないと、これはセットベースのアプローチを使用することによってのみ達成できますか?