sql >> データベース >  >> RDS >> Sqlserver

レポート週の表示

    DATEADD を使用し、@interval の初期化と更新されたループ ロジックを更新する:

    DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10)
    SELECT @REPORT_DATE = '2011-01-01T00:00:00'
    --SELECT @REPORT_DATE = GETDATE() -- should grab the date now.
    SELECT @WEEK_BEGINING = 'MONDAY'
    IF @WEEK_BEGINING = 'MONDAY'
    SET DATEFIRST 1
    ELSE IF @WEEK_BEGINING = 'TUESDAY'
    SET DATEFIRST 2
    ELSE IF @WEEK_BEGINING = 'WEDNESDAY'
    SET DATEFIRST 3
    ELSE IF @WEEK_BEGINING = 'THURSDAY'
    SET DATEFIRST 4
    ELSE IF @WEEK_BEGINING = 'FRIDAY'
    SET DATEFIRST 5
    ELSE IF @WEEK_BEGINING = 'SATURDAY'
    SET DATEFIRST 6
    ELSE IF @WEEK_BEGINING = 'SUNDAY'
    SET DATEFIRST 7
    DECLARE @WEEK_START_DATE DATETIME, @WEEK_END_DATE DATETIME
    --GET THE WEEK START DATE
    SELECT @WEEK_START_DATE = @REPORT_DATE - (DATEPART(DW, @REPORT_DATE) - 1)
    --GET THE WEEK END DATE
    SELECT @WEEK_END_DATE = @REPORT_DATE + (7 - DATEPART(DW, @REPORT_DATE))
    PRINT 'Week Start: ' + CONVERT(VARCHAR, @WEEK_START_DATE)
    PRINT 'Week End: ' + CONVERT(VARCHAR, @WEEK_END_DATE)
    
    DECLARE @Interval int = datediff(WEEK,getdate(),@WEEK_START_DATE)+1
    
    SELECT [email protected]_START_DATE
    , [email protected]_END_DATE
    INTO #WeekList
    
    WHILE @Interval <= 0
        BEGIN
        set @WEEK_START_DATE=DATEADD(WEEK,1,@WEEK_START_DATE)
        set @WEEK_END_DATE=DATEADD(WEEK,1,@WEEK_END_DATE)
        INSERT INTO #WeekList values (@WEEK_START_DATE,@WEEK_END_DATE)
        SET @Interval += 1;
        END
    
    SELECT *
    FROM #WeekList
    ORDER BY Start_Week DESC
    
    DROP TABLE #WeekList
    

    結果 (リストの上位 5 位と下位 5 位):

    Start_Week              End_Week
    ----------------------- -----------------------
    2012-03-12 00:00:00.000 2012-03-18 00:00:00.000
    2012-03-05 00:00:00.000 2012-03-11 00:00:00.000
    2012-02-27 00:00:00.000 2012-03-04 00:00:00.000
    2012-02-20 00:00:00.000 2012-02-26 00:00:00.000
    2012-02-13 00:00:00.000 2012-02-19 00:00:00.000
    ...
    2011-01-24 00:00:00.000 2011-01-30 00:00:00.000
    2011-01-17 00:00:00.000 2011-01-23 00:00:00.000
    2011-01-10 00:00:00.000 2011-01-16 00:00:00.000
    2011-01-03 00:00:00.000 2011-01-09 00:00:00.000
    2010-12-27 00:00:00.000 2011-01-02 00:00:00.000
    

    余談ですが、 date も使用できます Datetime の代わりに type 、時間を保存する必要がない場合。



    1. AccessとExcelを一緒に使用するトップ10の理由

    2. Asp Classic ConnectionString500-内部サーバーエラー

    3. タイムゾーン対応のdate_trunc関数

    4. SQLでの送信データ行と受信データ行のペアリング