0

これらは少し冗長で、多分過度に複雑に見えます。それらを単純化および/または読みやすくすることはできますか?

前週の月曜日と日曜日の日付を(整数型として)返します。

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);
4

2 に答える 2

3

私の経験から、プレゼンテーション以外の理由で日付を 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 設定があることにも注意してください。そのため、このコードは、その設定によっては月曜日から日曜日にならない場合があります。

于 2013-02-25T17:38:30.313 に答える
2

最も簡単な方法は、カレンダー テーブルを使用することです。カレンダー テーブルは、クエリをこれらの線に沿ったものに単純化する場合があります。

-- 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';
于 2013-02-25T17:40:35.507 に答える