Previous Monday & previous Sunday's date based on today's date

后端 未结 6 1548
情话喂你
情话喂你 2020-12-05 00:46

I need the correct syntax to give me :

  1. Previous week\'s Monday\'s date based on the current date/time using GETDATE()
  2. Previous week\'s Su
6条回答
  •  北荒
    北荒 (楼主)
    2020-12-05 01:16

    I think this is much cleaner solution:

    SELECT
        -- 17530101 or 1753-01-01 is the minimum date in SQL Server
        DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 7, '17530101') AS [LowerLimit], -- Last Week's Monday
        DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 1, '17530101') AS [UpperLimit] -- Last Week's Sunday.
    

    Which can be used like this in a real world query:

    SELECT
        *
    FROM
        SomeTable
    WHERE
        SomeTable.[Date] >= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 7, '17530101') AND
        SomeTable.[Date] <= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 1, '17530101')
    

    Here are some tests:

    1. Leap Year

    Current Date: 2016-02-29 00:00:00.000

    Results:

    LowerLimit                 UpperLimit
    2016-02-22 00:00:00.000    2016-02-28 00:00:00.000
    

    2. Last Week was in different year

    Current Date: 2016-01-06 00:00:00.000

    LowerLimit                 UpperLimit
    2015-12-28 00:00:00.000    2016-01-03 00:00:00.000
    

    3. Lower limit in previous month and upper limit in current month

    Current Date: 2016-05-04 00:00:00.000

    LowerLimit                 UpperLimit
    2016-04-25 00:00:00.000    2016-05-01 00:00:00.000
    

    4. Current Date is Sunday

    Current Date: 2016-05-08 00:00:00.000

    LowerLimit                 UpperLimit
    2016-04-25 00:00:00.000    2016-05-01 00:00:00.000
    

提交回复
热议问题