Als uw datums niet meer dan 2047 dagen uit elkaar liggen:
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
Ik heb mijn antwoord bijgewerkt na verschillende verzoeken om dit te doen. Waarom?
Het oorspronkelijke antwoord bevatte de subquery
select distinct number from master.dbo.spt_values
where name is null
wat hetzelfde resultaat oplevert, zoals ik ze heb getest op SQL Server 2008, 2012 en 2016.
Toen ik echter probeerde de code van MSSQL intern te analyseren bij het opvragen van spt_values
, ontdekte ik dat de SELECT
statements bevatten altijd de clausule WHERE [type]='[magic code]'
.
Daarom heb ik besloten dat hoewel de query het juiste resultaat retourneert, het om verkeerde redenen het juiste resultaat oplevert:
Er kan een toekomstige versie van SQL Server zijn die een andere [type]
definieert waarde die ook NULL
. heeft als waarden voor [name]
, buiten het bereik van 0-2047, of zelfs niet-aaneengesloten, in welk geval het resultaat gewoon verkeerd zou zijn.