Ако датите ви са с разлика от не повече от 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.
Въпреки това, докато се опитах да анализирам кода, който MSSQL вътрешно при запитване от spt_values
, открих, че SELECT
изразите винаги съдържат клаузата WHERE [type]='[magic code]'
.
Затова реших, че въпреки че заявката връща правилния резултат, тя дава правилния резултат по грешни причини:
Може да има бъдеща версия на SQL Server, която дефинира различен [type]
стойност, която също има NULL
като стойности за [name]
, извън диапазона от 0-2047, или дори несвързани, в който случай резултатът би бил просто грешен.