Dit werkt zolang de intervallen 38 jaar of minder zijn. Het biedt betere prestaties en is niet afhankelijk van de lokale instelling van de server.
Deze instelling zorgt ervoor dat uw script een verkeerd resultaat retourneert:
set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')
Dit betekent dat uw lokale instelling momenteel in strijd is met uw behoeften en dat uw code compenseert.
Hier is het script. Het script is om prestatieredenen beperkt tot 38 jaar (ik vind het onwaarschijnlijk dat je grotere intervallen nodig hebt dan dat). Het zal vrij eenvoudig zijn om het uit te breiden naar meer jaren.
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)
Resultaat:
Start_Week End_Week
2014-03-17 2014-03-23
2014-03-24 2014-03-30