Pokud mezi vašimi daty není více než 2047 dní:
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
Po několika žádostech jsem aktualizoval svou odpověď. Proč?
Původní odpověď obsahovala dílčí dotaz
select distinct number from master.dbo.spt_values
where name is null
což přináší stejný výsledek, jak jsem je testoval na SQL Server 2008, 2012 a 2016.
Nicméně, jak jsem se snažil analyzovat kód, který MSSQL interně při dotazování z spt_values
, zjistil jsem, že SELECT
příkazy vždy obsahují klauzuli WHERE [type]='[magic code]'
.
Proto jsem se rozhodl, že ačkoli dotaz vrací správný výsledek, poskytuje správný výsledek ze špatných důvodů:
Může existovat budoucí verze SQL Server, která definuje jiný [type]
hodnota, která má také NULL
jako hodnoty pro [name]
, mimo rozsah 0-2047, nebo dokonce nesouvislé, v takovém případě by byl výsledek jednoduše špatný.