Jika tanggal Anda tidak lebih dari 2047 hari:
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
Saya memperbarui jawaban saya setelah beberapa permintaan untuk melakukannya. Mengapa?
Jawaban asli berisi subquery
select distinct number from master.dbo.spt_values
where name is null
yang memberikan hasil yang sama, seperti yang saya uji pada SQL Server 2008, 2012, dan 2016.
Namun, ketika saya mencoba menganalisis kode yang MSSQL secara internal ketika menanyakan dari spt_values
, saya menemukan bahwa SELECT
pernyataan selalu berisi klausa WHERE [type]='[magic code]'
.
Oleh karena itu saya memutuskan bahwa meskipun kueri mengembalikan hasil yang benar, kueri memberikan hasil yang benar untuk alasan yang salah:
Mungkin ada versi SQL Server yang akan datang yang mendefinisikan [type]
yang berbeda nilai yang juga memiliki NULL
sebagai nilai untuk [name]
, di luar kisaran 0-2047, atau bahkan tidak bersebelahan, dalam hal ini hasilnya akan salah.