0

クエリの列または一時テーブルのいずれかを生成する必要があります (どちらが必要かわかりません)

特定の日付範囲内にある土曜日の日付のリストを取得できるようにします。

このリストは結合で使用され、レコードを週に関連付けます。

私のオプションは何ですか?

サンプル入力:

開始日: 2013 年 3 月 1 日

宛先: 2013 年 4 月 30 日

結果:

週末 - 2013/03/02 - 2013/03/09 - 2013/03/16 - 2013/03/23 - 2013/03/30 - 2013/04/06 - 2013/04/13 - 2013/04/20 - 2013 年 4 月 27 日 - 2013 年 4 月 5 日

現在のコード:

create table #TBL7(YEAR  INT, WEEKNUMBER  INT, STARTDATE  DATETIME, ENDDATE DATETIME)


begin
    declare @startdate datetime
                    , @enddate datetime
                    , @ctr int

    SET @startdate = CAST(2013 AS VARCHAR)+ '/01/01'
    SET @enddate = CAST(2013 AS VARCHAR) + '/12/31'
    SET @ctr = 0
    WHILE @enddate >= @startdate
    BEGIN
            SET @ctr = @ctr + 1
            INSERT INTO #TBL7
            values(year(@startdate), @ctr, @startdate, @startdate + 6)
            SET @startdate = @startdate + 7
    END

end



select * from #TBL7
4

3 に答える 3

0

これはうまくいくはずです:

WITH cteWeeks (WeekEnding) As
(
   -- Find the Saturday of the first week.
   -- Need to allow for different DATEFIRST settings:
   SELECT
      CASE
         WHEN DatePart(dw, DateAdd(day, @@datefirst, @StartDate)) = 7 THEN @StartDate
         ELSE DateAdd(day, 7 - DatePart(dw, DateAdd(day, @@datefirst, @StartDate)), @StartDate)
      END

   UNION ALL

   SELECT
      DateAdd(day, 7, WeekEnding)
   FROM
      cteWeeks
   WHERE
      WeekEnding < @EndDate
)
SELECT
   WeekEnding
FROM
   cteWeeks
;

http://www.sqlfiddle.com/#!3/d41d8/12095

于 2013-04-05T15:35:41.800 に答える