5

前の日曜日が同じである場合、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。ただし、戻り値は同じです。

ここで何が起こっているのですか?正しい週差を取得するにはどうすればよいですか?

4

1 に答える 1

5

DATEDIFF は DATEFIRST 設定を尊重しません。

これは、潜在的な回避策を含む同様の質問です。

T-SQL DATEDIFF 関数の週の開始を設定することは可能ですか?

于 2010-04-26T21:55:44.423 に答える