Wenn Ihre Daten nicht mehr als 2047 Tage auseinander liegen:
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
Ich habe meine Antwort nach mehreren Anfragen aktualisiert. Warum?
Die ursprüngliche Antwort enthielt die Unterabfrage
select distinct number from master.dbo.spt_values
where name is null
was das gleiche Ergebnis liefert, da ich sie auf SQL Server 2008, 2012 und 2016 getestet habe.
Da ich jedoch versucht habe, den Code zu analysieren, der MSSQL intern beim Abfragen von spt_values
verwendet , ich habe festgestellt, dass die SELECT
-Anweisungen enthalten immer die Klausel WHERE [type]='[magic code]'
.
Daher habe ich entschieden, dass die Abfrage zwar das richtige Ergebnis zurückgibt, aber aus falschen Gründen das richtige Ergebnis liefert:
Möglicherweise gibt es eine zukünftige Version von SQL Server, die einen anderen [type]
definiert Wert, der auch NULL
hat als Werte für [name]
, außerhalb des Bereichs von 0-2047 oder sogar nicht zusammenhängend, in diesem Fall wäre das Ergebnis einfach falsch.