これらは少し冗長で、多分過度に複雑に見えます。それらを単純化および/または読みやすくすることはできますか?
前週の月曜日と日曜日の日付を(整数型として)返します。
declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112),
@edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112);
これらは少し冗長で、多分過度に複雑に見えます。それらを単純化および/または読みやすくすることはできますか?
前週の月曜日と日曜日の日付を(整数型として)返します。
declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112),
@edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112);
私の経験から、プレゼンテーション以外の理由で日付を char に変換すると、間違いを犯したことになります。また、GetDate を 2 回呼び出すと、異なる応答が期待されます。
DECLARE
@Now datetime,
@WeekStart datetime,
@LastWeekStart datetime,
@LastWeekEnd datetime
SET @Now = GetDate()
SET @WeekStart = DateAdd(wk, DateDiff(wk, 0, @Now), 0) --standard time trimmer
SET @LastWeekStart = DateAdd(wk, -1, @WeekStart)
SET @LastWeekEnd = DateAdd(dd, -1, @WeekStart)
SELECT @Now, @WeekStart, @LastWeekStart, @LastWeekEnd
また、SQL Server が週の始まりと見なす場所を制御する sql 設定があることにも注意してください。そのため、このコードは、その設定によっては月曜日から日曜日にならない場合があります。
最も簡単な方法は、カレンダー テーブルを使用することです。カレンダー テーブルは、クエリをこれらの線に沿ったものに単純化する場合があります。
-- Select the previous Sunday. The right inequality operator depends
-- on exactly what *you* mean by "previous".
select max(calendar_date)
from calendar
where calendar_date < current_date
and calendar_day_of_week = 'Sun';