Nếu các ngày của bạn cách nhau không quá 2047 ngày:
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
Tôi đã cập nhật câu trả lời của mình sau một số yêu cầu làm như vậy. Tại sao?
Câu trả lời ban đầu chứa truy vấn con
select distinct number from master.dbo.spt_values
where name is null
mang lại kết quả tương tự như tôi đã kiểm tra chúng trên SQL Server 2008, 2012 và 2016.
Tuy nhiên, khi tôi cố gắng phân tích mã MSSQL nội bộ khi truy vấn từ spt_values
, Tôi thấy rằng SELECT
câu lệnh luôn chứa mệnh đề WHERE [type]='[magic code]'
.
Do đó, tôi quyết định rằng mặc dù truy vấn trả về kết quả chính xác, nhưng nó mang lại kết quả chính xác vì những lý do sai:
Có thể có một phiên bản SQL Server trong tương lai xác định một [type]
khác giá trị cũng có NULL
làm giá trị cho [name]
, nằm ngoài phạm vi 0-2047 hoặc thậm chí không liền kề, trong trường hợp đó, kết quả sẽ đơn giản là sai.