2013-02-25 3 views
0

이것들은 약간 장황하고 어쩌면 지나치게 복잡해 보입니다. 내가 더 쉽게 읽을 수 있도록 만들 수 있습니까?GETDATE()를 사용하는 이전 월요일/일요일 표준 구문

지난 주 월요일과 일요일의 날짜 (정수 유형)를 반환합니다.

declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112), 
    @edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112); 

답변

3

제 경험상 프레젠테이션 이외의 다른 이유로 날짜를 char로 변환하면 실수를 한 것입니다. 또한 GetDate를 두 번 호출하면 다른 대답을 기대해야합니다.

DECLARE 
    @Now datetime, 
    @WeekStart datetime, 
    @LastWeekStart datetime, 
    @LastWeekEnd datetime 

SET @Now = GetDate() 
SET @WeekStart = DateAdd(wk, DateDiff(wk, 0, @Now), 0) --standard time trimmer 
SET @LastWeekStart = DateAdd(wk, -1, @WeekStart) 
SET @LastWeekEnd = DateAdd(dd, -1, @WeekStart) 

SELECT @Now, @WeekStart, @LastWeekStart, @LastWeekEnd 

또한 SQL 서버가 주 시작이라고 생각합니다 어디 제어하는 ​​SQL 설정이 있음을 알고, 그래서이 코드는 설정에 따라 월 ~> 일요일를 제공하지 않을 수 있습니다.

1

가장 간단한 방법은 calendar table을 사용하는 것입니다. 달력 표를 사용하면 이러한 행을 따라 쿼리를 단순화 할 수 있습니다.

-- Select the previous Sunday. The right inequality operator depends 
-- on exactly what *you* mean by "previous". 
select max(calendar_date) 
from calendar 
where calendar_date < current_date 
    and calendar_day_of_week = 'Sun'; 
+0

+1 조언/도움 감사합니다 .... 우리는 날짜 차원을 가지고 있기 때문에 탐험이 필요하다고 생각합니다. – whytheq

관련 문제