前の日曜日が同じである場合、2 つの日付は同じ週の一部と見なされます。DATEDIFF
理想的には、精巧なイディオムを学習して値を計算するのではなく、を使用してこれを行いたいと考えています。しかし、何週間もかかると、それがどのように機能するかわかりません。
次のクエリは 1 と 2 を返します。カレンダーの週が日曜日で始まる場合、つまりSET DATEFIRST 7
事前に実行する場合、または@@DATEFIRST
デフォルトで 7 である場合、これは理にかなっています。
SET DATEFIRST 7;
-- SET DATEFIRST 1;
DECLARE
@d1 DATETIME,
@d2a DATETIME,
@d2b DATETIME
;
SELECT
@d1 = '2010-04-05', -- Monday
@d2a = '2010-04-16', -- Following Friday
@d2b = '2010-04-18' -- the Sunday following
;
SELECT
DATEDIFF(week, @d1, @d2a) AS weekdiff_a -- returns 1
,DATEDIFF(week, @d1, @d2b) AS weekdiff_b -- returns 2
;
したがってSET DATEFIRST 1
、 の代わりに を実行すると、異なる結果が予想されましたSET DATEFIRST 7
。ただし、戻り値は同じです。
ここで何が起こっているのですか?正しい週差を取得するにはどうすればよいですか?