私に与えるには正しい構文が必要です:
- を使用して、現在の日付/時刻に基づく前週の月曜日の日付
GETDATE()
- を使用して、現在の日付/時刻に基づく前週の日曜日の日付
GETDATE()
したがって、今日の日付 (2012 年 9 月 14 日) に基づいて、次のようにします。
- 前の月曜日の日付 = 2012 年 3 月 9 日
- 前の日曜日の日付 = 2012 年 9 月 9 日
簡単:
--start of last week
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
--end of last week
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6)
編集:
以下は、日曜日の日付の問題を処理します。
DECLARE @input varchar(10)
--SET @input = '9/9/2012' -- simulates a Sunday
SET @input = GETDATE()
--start of last week
SELECT DATEADD(wk, DATEDIFF(wk, 6,
CASE DATEPART(dw,@input)
WHEN 1 THEN DATEADD(d,-1,@input)
ELSE @input
END
), 0)
--end of last week
SELECT DATEADD(wk, DATEDIFF(wk, 6,
CASE DATEPART(dw,@input)
WHEN 1 THEN DATEADD(d,-1,@input)
ELSE @input
END
), 6)
case オプションを使用する代わりに、次のようにして現在の週の日曜日を取得することもできます。
SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE())
前の週の日曜日を取得するには、さらに 7 日を引きます。
SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1-6, GETDATE())
少なくとも MSSQL 2012 の時点では、日曜日の問題はもはや存在しないように見えることに注意してください。
SELECT DATEADD(wk, DATEDIFF(wk, 6, @input), 0)
そして複雑なもの
SELECT DATEADD(wk, DATEDIFF(wk, 6,
CASE DATEPART(dw,@input)
WHEN 1 THEN DATEADD(d,-1,@input)
ELSE @input
END
), 0)
日曜日を含め、私が試したどの日付でも同じものを返します。