Jeśli między datami a datami nie przekracza 2047 dni:
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
Zaktualizowałem swoją odpowiedź po kilku prośbach o to. Dlaczego?
Oryginalna odpowiedź zawierała podzapytanie
select distinct number from master.dbo.spt_values
where name is null
co daje ten sam wynik, co testowałem na SQL Server 2008, 2012 i 2016.
Jednak, gdy próbowałem przeanalizować kod MSSQL wewnętrznie podczas wykonywania zapytań z spt_values
, odkryłem, że SELECT
instrukcje zawsze zawierają klauzulę WHERE [type]='[magic code]'
.
Dlatego zdecydowałem, że chociaż zapytanie zwraca poprawny wynik, dostarcza poprawny wynik z niewłaściwych powodów:
Może istnieć przyszła wersja SQL Server, która definiuje inny [type]
wartość, która również ma NULL
jako wartości dla [name]
, poza zakresem 0-2047, a nawet nieciągły, w takim przypadku wynik byłby po prostu błędny.