Hvis dine datoer ikke er mere end 2047 dage fra hinanden:
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
Jeg opdaterede mit svar efter adskillige anmodninger om at gøre det. Hvorfor?
Det originale svar indeholdt underforespørgslen
select distinct number from master.dbo.spt_values
where name is null
som giver det samme resultat, som jeg testede dem på SQL Server 2008, 2012 og 2016.
Men da jeg prøvede at analysere koden, der MSSQL internt, når jeg forespørger fra spt_values
, fandt jeg ud af, at SELECT
sætninger indeholder altid klausulen WHERE [type]='[magic code]'
.
Derfor besluttede jeg, at selvom forespørgslen returnerer det korrekte resultat, leverer den det korrekte resultat af forkerte årsager:
Der kan være en fremtidig version af SQL Server, som definerer en anden [type]
værdi, som også har NULL
som værdier for [name]
, uden for intervallet 0-2047, eller endda ikke-sammenhængende, i hvilket tilfælde resultatet simpelthen ville være forkert.