これが私の解決策で、8日間テストされています。
SET DateFirst 7
DECLARE @Today datetime
SET @Today = '2008-10-22'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-23'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-24'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-25'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-26'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-27'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-28'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-29'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
日曜日の問題は次のとおりです。
SELECT
DateDiff(wk, 0, '2008-10-25') as SatWeek, --5677
DateDiff(wk, 0, '2008-10-26') as SunWeek, --5688
DateDiff(wk, 0, '2008-10-27') as MonWeek --5688
SELECT
DatePart(dw, '2008-10-25') as SatPart, --7
DatePart(dw, '2008-10-26') as SunPart, --1
DatePart(dw, '2008-10-27') as MonPart, --2
convert(datetime,'2008-10-25') - (DatePart(dw, '2008-10-25') - 2) as SatMonday,
--'2008-10-20'
convert(datetime,'2008-10-26') - (-1) as SunMonday,
--'2008-10-27'
convert(datetime,'2008-10-27') - (DatePart(dw, '2008-10-27') - 2) as MonMonday
--'2008-10-27'
これらのソリューションの多くは、同じ週の日曜日と月曜日に同じ答えを提供します。古い月曜日は、別の月曜日が発生するまで辞任しないでください。