Si vos dates ne sont pas séparées de plus de 2 047 jours :
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
J'ai mis à jour ma réponse après plusieurs demandes en ce sens. Pourquoi ?
La réponse d'origine contenait la sous-requête
select distinct number from master.dbo.spt_values
where name is null
qui donne le même résultat, car je les ai testés sur SQL Server 2008, 2012 et 2016.
Cependant, comme j'ai essayé d'analyser le code MSSQL en interne lors de l'interrogation de spt_values
, j'ai trouvé que le SELECT
les instructions contiennent toujours la clause WHERE [type]='[magic code]'
.
Par conséquent, j'ai décidé que bien que la requête renvoie le bon résultat, elle donne le bon résultat pour de mauvaises raisons :
Il peut y avoir une future version de SQL Server qui définit un [type]
différent valeur qui a aussi NULL
comme valeurs pour [name]
, en dehors de la plage de 0 à 2047, voire non contiguës, auquel cas le résultat serait tout simplement faux.