यह तब तक काम करेगा जब तक अंतराल 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