0

特定の週の開始日を計算するために、列に次の式があります。

dateadd(week,[Week]-(1),
 dateadd(day,(-1),
  dateadd(week,
   datediff(week,(0),
    CONVERT([varchar](4),[Year],(0))+'-01-01'),
     (1))))

WeekとのようなYear他のフィールドはどこですか382012

問題は、2012 年 38 週の開始日を月曜日 (9 月 17 日) として計算することです。代わりに日曜日 (9 月 16 日) にしたいのですが、これは可能ですか?

どうもありがとう。

4

3 に答える 3

1

これは、週の最初の日が日曜日であると仮定して、週番号と年を指定して、週の最初の曜日を返します。
標準的な除外が適用されます。たとえば、1499 年は試さないでください。

declare @tbl table ([Week] int, [Year] int)
insert @tbl select 38,2012
  union all select  1,2012
  union all select  0,2012
  union all select  1,2013

select DATEADD(
    Week,
    [Week]-1,
    DATEADD(
        Day,
        (8-@@datefirst)-DATEPART(dw, CAST([Year]*10000+101 AS VARCHAR(8))),
        CAST([Year]*10000+101 AS VARCHAR(8))))
from @TBL

結果

2012-09-16 00:00:00.000
2012-01-01 00:00:00.000
2011-12-25 00:00:00.000
2012-12-30 00:00:00.000

週番号は 1 から始まることに注意してください。週が日曜日に始まらない場合、その週の最初の日は前の年になる可能性があります (行 #4)。週は相対的であるため、週 0、-1 などを使用することができ、正しいか間違っているかにかかわらず、結果 (行 #3) が得られます。

また、代替手段として、別の方法を使用して年から日付を作成したことにお気付きかもしれません。


クエリの(8-@@datefirst)一部により、DATEFIRST設定に関係なく堅牢になります。

于 2012-09-18T19:09:49.003 に答える
0

週の最初の日を日曜日にしたい場合は、DATEFIRST 設定を使用して、データベースを変更して日曜日にすることができます。

于 2012-09-18T16:42:26.830 に答える
0
    function getFirstDateOfThisWeek(d)
    {
        var TempDate = new Date(d || new Date());            
        TempDate.setDate(TempDate.getDate() + (@Config.WeekStartOn - 1 - TempDate.getDay() - 7) % 7);            
        return TempDate;
    }

    var StartDate = getFirstDateOfThisWeek(new Date()); //1st date of this week
于 2014-03-19T06:30:17.043 に答える