복붙노트

[SQL] 오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜

SQL

오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜

나는 저를주고 올바른 구문이 필요합니다 :

그래서, 오늘 날짜를 기준으로 (14/09/2012)은 나는 다음 원하는 것 :

해결법

  1. ==============================

    1.쉬운:

    쉬운:

    --start of last week
    SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
    
    --end of last week
    SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6)
    

    편집하다:

    아래는 일요일 날짜 문제를 처리합니다.

    DECLARE @input varchar(10)
    --SET @input = '9/9/2012' -- simulates a Sunday
    SET @input = GETDATE()
    
    --start of last week
    SELECT DATEADD(wk, DATEDIFF(wk, 6, 
    CASE DATEPART(dw,@input)
    WHEN 1 THEN DATEADD(d,-1,@input)
    ELSE @input
    END
    ), 0)
    
    --end of last week
    SELECT DATEADD(wk, DATEDIFF(wk, 6, 
    CASE DATEPART(dw,@input)
    WHEN 1 THEN DATEADD(d,-1,@input)
    ELSE @input
    END
    ), 6)
    
  2. ==============================

    2.대신 케이스 옵션을 사용하여, 당신은 또한 현재 주 일요일 얻기 위해이 작업을 수행 할 수 있습니다 :

    대신 케이스 옵션을 사용하여, 당신은 또한 현재 주 일요일 얻기 위해이 작업을 수행 할 수 있습니다 :

    SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE())
    

    지난 주 일요일를 얻으려면, 7 일 이상 빼기 :

    SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1-6, GETDATE())
    
  3. ==============================

    3.더 나은, 내 생각, 어떤 DATEFIRST 매개 변수와 함께 어떤 일, 어떤 요일이 작품 (한 주를 시작하는 요일을 설정, 프랑스에서 일반적으로 1-월요일 기본값은 7 일).

    더 나은, 내 생각, 어떤 DATEFIRST 매개 변수와 함께 어떤 일, 어떤 요일이 작품 (한 주를 시작하는 요일을 설정, 프랑스에서 일반적으로 1-월요일 기본값은 7 일).

    create function [dbo].[previousWeekDayDate](@anyDate date, @anyWeekDay int)
    returns Date
    as
    begin
        return DATEADD(dd, ((DATEPART(dw,@anyDate) + @@DateFirst - @anyWeekDay + 13) % 7) * -1, @anyDate)
    end
    

    기능과 사용을 작성, SQL 2008 작동합니다 :

    SELECT dbo.previousWeekDayDate(GetDate(),1) --for Monday
    SELECT dbo.previousWeekDayDate(GetDate(),7) --for Sunday
    
  4. ==============================

    4.나는이 많은 청소기 솔루션입니다 생각 :

    나는이 많은 청소기 솔루션입니다 생각 :

    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.
    

    어떤은 실제 쿼리에서 다음과 같이 사용할 수 있습니다 :

    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')
    

    다음은 몇 가지 시험은 다음과 같습니다 :

    1. 윤년

    현재 날짜 : 2016년 2월 29일 00 : 00 : 00.000

    결과 :

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

    2. 지난 주 다른 해에 있었다

    현재 날짜 : 2016년 1월 6일 00 : 00 : 00.000

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

    현재 달의 전월과 상한 3. 하한

    현재 날짜 : 2016년 5월 4일 00 : 00 : 00.000

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

    4. 현재 날짜가 일요일

    현재 날짜 : 2016년 5월 8일 00 : 00 : 00.000

    LowerLimit                 UpperLimit
    2016-04-25 00:00:00.000    2016-05-01 00:00:00.000
    
  5. ==============================

    5.일요일에 문제가 MSSQL 2012 년 모두 간단한 솔루션으로 적어도 더 이상 일 현재까지 나타납니다 주목해야한다

    일요일에 문제가 MSSQL 2012 년 모두 간단한 솔루션으로 적어도 더 이상 일 현재까지 나타납니다 주목해야한다

    SELECT DATEADD(wk, DATEDIFF(wk, 6, @input), 0)
    

    그리고 복잡한 일

    SELECT DATEADD(wk, DATEDIFF(wk, 6, 
    CASE DATEPART(dw,@input)
    WHEN 1 THEN DATEADD(d,-1,@input)
    ELSE @input
    END
    ), 0)
    

    나는 일요일을 포함하여 시도한 것이 어떤 날짜에 대해 동일한을 반환합니다.

  6. ==============================

    6.이전 월요일 :

    이전 월요일 :

    SELECT DATEADD(DD,-(DATEPART(WEEKDAY, GETDATE())+5)%7, GETDATE())
    

    이전 일요일

    SELECT DATEADD(DD,-(DATEPART(WEEKDAY, GETDATE())+6)%7, GETDATE())
    
  7. from https://stackoverflow.com/questions/12422248/previous-monday-previous-sundays-date-based-on-todays-date by cc-by-sa and MIT license