1. 程式人生 > >使用sql語句計算周次及起始日期

使用sql語句計算周次及起始日期

       最近在做週報填報的功能,其中需要算一下週次及起始日期。本打算用程式程式碼算一下的,但是感覺用sql更有意思,所以搜了一些相關的知識以及前人寫的相關的sql語句,在此基礎上進行了完善。

1、國際標準週日是每週的第一天,但是在咱們中國人還是習慣週一為每週的第一天,因此首先要把週一設定為每週的第一天

SET DATEFIRST 1

          2、計算你傳過來時間段的開始日期是本年的第幾周和周幾(如果為週日則周次再加一)

DATEPART(dw, @tmpDate)
SELECT   DATEPART(WEEK, @tmpDate)
         3、完整sql(這裡我傳的時間段是2017-01-15至2017-01-31)
SET DATEFIRST 1
DECLARE @tmpDate DATETIME

DECLARE @index INT
DECLARE @table TABLE
    (
      WeekTimes INT ,
      FirstDay DATE ,
      EndDay DATE
    )
SET @tmpDate = '2017-1-15'
DECLARE @YearFistWK INT= DATEPART(dw, @tmpDate)
SET @index = ( SELECT   DATEPART(WEEK, @tmpDate)   
             )
IF ( @YearFistWK = 7 )
    BEGIN 
        SET @index = @index + 1
    END
WHILE @tmpDate <= '2017-1-31'
    BEGIN
        INSERT  INTO @table
                SELECT  @index ,
                        a.FirstDay ,
                        b.EndDay
                FROM    ( SELECT    1 AS ID ,
                                    DATEADD(wk, DATEDIFF(wk, 0, @tmpDate), 0) AS FirstDAy
                        ) a
                        LEFT JOIN ( SELECT  1 AS ID ,
                                            DATEADD(wk,
                                                    DATEDIFF(wk, 0, @tmpDate),
                                                    6) AS EndDay
                                  ) b ON a.ID = b.ID

        SET @tmpDate = DATEADD(DAY, 7, @tmpDate)

        SET @index = @index + 1

    END
SELECT  *
FROM    @table

          4、執行結果