Se le tue date non distano più di 2047 giorni l'una dall'altra:
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
Ho aggiornato la mia risposta dopo diverse richieste in tal senso. Perché?
La risposta originale conteneva la sottoquery
select distinct number from master.dbo.spt_values
where name is null
che fornisce lo stesso risultato, come li ho testati su SQL Server 2008, 2012 e 2016.
Tuttavia, quando ho provato ad analizzare il codice che MSSQL internamente durante l'esecuzione di query da spt_values
, ho trovato che il SELECT
le istruzioni contengono sempre la clausola WHERE [type]='[magic code]'
.
Pertanto ho deciso che sebbene la query restituisca il risultato corretto, fornisce il risultato corretto per motivi sbagliati:
Potrebbe esserci una versione futura di SQL Server che definisce un diverso [type]
valore che ha anche NULL
come valori per [name]
, al di fuori dell'intervallo 0-2047, o addirittura non contiguo, nel qual caso il risultato sarebbe semplicemente sbagliato.