Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टीएसक्यूएल में बढ़ती तिथियों का परिणाम उत्पन्न करें

यदि आपकी तिथियां 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 की सीमा के बाहर, या गैर-सन्निहित भी, इस स्थिति में परिणाम केवल गलत होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL डेटाबेस को आसानी से पुनर्स्थापित करें - चरण दर चरण मार्गदर्शिका

  2. SQL सर्वर में IDENT_CURRENT बनाम @@ पहचान बनाम SCOPE_IDENTITY:क्या अंतर है?

  3. SQL सर्वर नेटवर्क इंटरफेस:कनेक्शन स्ट्रिंग मान्य नहीं है [87]

  4. मैं एक एसक्यूएल स्टेटमेंट या संग्रहीत प्रक्रिया से बाहरी डेटाबेस से कैसे जुड़ सकता हूं?

  5. ')' के पास गलत सिंटैक्स GETDATE के साथ संग्रहित प्रक्रिया को बुला रहा है