यदि आपकी तिथियां 2047 दिनों से अधिक अलग नहीं हैं:
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
ऐसा करने के कई अनुरोधों के बाद मैंने अपना उत्तर अपडेट किया। क्यों?
मूल उत्तर में सबक्वेरी शामिल थी
select distinct number from master.dbo.spt_values
where name is null
जो वैसा ही परिणाम देता है, जैसा कि मैंने SQL Server 2008, 2012 और 2016 पर उनका परीक्षण किया था।
हालाँकि, जैसा कि मैंने spt_values
से क्वेरी करते समय उस कोड का विश्लेषण करने की कोशिश की जो MSSQL आंतरिक रूप से , मैंने पाया कि SELECT
स्टेटमेंट में हमेशा क्लॉज होता है WHERE [type]='[magic code]'
।
इसलिए मैंने फैसला किया कि हालांकि क्वेरी सही परिणाम देती है, लेकिन यह गलत कारणों से सही परिणाम देती है:
SQL सर्वर का भविष्य का संस्करण हो सकता है जो एक अलग [type]
. को परिभाषित करता है मान जिसमें NULL
भी हो [name]
. के मान के रूप में , 0-2047 की सीमा के बाहर, या गैर-सन्निहित भी, इस स्थिति में परिणाम केवल गलत होगा।