このクエリは、変数で定義された日付範囲の間のすべての日を返し、結果セットは 31 の個別の値です。ただし、再帰 CTE は、最初のクエリが 1 回だけ実行され、2 番目のクエリが以前に作成された結果セットに対して機能するように機能します。したがって、重複があるように見えますが、異なる結果セットが返されました。CTEがDISTINCT句を内部的に適用するか、それとも別のものですか? DISTINCT 値を取得するにはどうすればよいですか?
DECLARE
@DateFrom DATE = '20130101' ,
@DateTo DATE = '20130131'
WITH Days
AS ( SELECT CAST(@DateFrom AS DATETIME) AS dt
UNION ALL
SELECT DATEADD(dd, 1, dt)
FROM Days s
WHERE DATEADD(dd, 1, dt) <= CAST(@DateTo AS DATETIME)
)
SELECT dt
FROM Days