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

दो तिथियों के बीच सप्ताह प्रारंभ तिथि (सोमवार) और समाप्ति तिथि (रविवार) की सूची कैसे प्राप्त करें?

यह तब तक काम करेगा जब तक अंतराल 38 साल या उससे कम हो। यह बेहतर प्रदर्शन की पेशकश करेगा और यह सर्वर की स्थानीय सेटिंग पर निर्भर नहीं करता है।

यह सेटिंग आपकी स्क्रिप्ट को गलत परिणाम देगी:

set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')

इसका मतलब है कि आपकी स्थानीय सेटिंग वर्तमान में आपकी ज़रूरतों के विरोध में है और आपका कोड क्षतिपूर्ति कर रहा है।

यहाँ स्क्रिप्ट है। प्रदर्शन कारणों से स्क्रिप्ट 38 साल तक सीमित है (मुझे यह असंभव लगता है कि आपको इससे बड़े अंतराल की आवश्यकता है)। इसे और वर्षों तक विस्तारित करना काफी आसान होगा।

DECLARE @FromDate DATE = '2014-03-21'    
DECLARE @ToDate DATE  = '2014-03-24'    

SELECT @fromdate = dateadd(day, datediff(day, 0, @FromDate)/7*7, 0), 
@todate = dateadd(day, datediff(day, 0, @ToDate)/7*7, 6)

SELECT dateadd(d, number * 7, @fromdate) Start_Week, 
dateadd(d, number * 7 + 6, @fromdate) End_Week
FROM
master..spt_values
WHERE type = 'P' and
@todate >= dateadd(d, number * 7, @fromdate)

परिणाम:

Start_Week  End_Week
2014-03-17  2014-03-23
2014-03-24  2014-03-30


  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 सर्वर 2008 में सरणी स्टोर करें

  3. Microsoft SQL Server 2012 क्वेरी प्रबंधन स्टूडियो में JDBC 4.0 से अधिक लेकिन सेकंड (सेकंड) क्यों लेती है?

  4. टी-एसक्यूएल एल्गोरिदम असुरक्षित एचटीएमएल अक्षरों को एचटीएमएल कैरेक्टर एंटिटी रेफरेंस के रूप में एन्कोड करने के लिए

  5. SQL सर्वर में डेटाबेस फ़ाइल की आईडी वापस करने के लिए FILE_IDEX() का उपयोग करें