日付の間隔が2047日以内の場合:
declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)
select dateadd(day, number, @dt)
from
(select number from master.dbo.spt_values
where [type] = 'P'
) n
where dateadd(day, number, @dt) < @dtEnd
いくつかのリクエストがあった後、回答を更新しました。なぜですか?
元の回答にはサブクエリが含まれていました
select distinct number from master.dbo.spt_values
where name is null
これは、SQL Server 2008、2012、および2016でテストしたのと同じ結果をもたらします。
ただし、spt_values
からクエリを実行するときに、MSSQLが内部的に使用するコードを分析しようとしたため 、SELECT
ステートメントには常に句WHERE [type]='[magic code]'
が含まれます 。
したがって、クエリは正しい結果を返しますが、間違った理由で正しい結果を提供することにしました。
別の[type]
を定義するSQLServerの将来のバージョンが存在する可能性があります NULL
も含む値 [name]
の値として 、0〜2047の範囲外、または連続していない場合でも、結果は単純に間違っています。