Dette vil virke, så længe intervallerne er 38 år eller mindre. Det giver bedre ydeevne, og det er ikke afhængigt af serverens lokale indstillinger.
Denne indstilling vil få dit script til at returnere forkert resultat:
set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')
Det betyder, at din lokale indstilling i øjeblikket er i konflikt med dine behov, og din kode kompenserer.
Her er manuskriptet. Scriptet er begrænset til 38 år af præstationsmæssige årsager (jeg finder det usandsynligt, at du har brug for større intervaller end det). Det vil være ret nemt at forlænge det til flere år.
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)
Resultat:
Start_Week End_Week
2014-03-17 2014-03-23
2014-03-24 2014-03-30