2016-07-26 3 views
2

DateTimeDayOfWeek 중 하나를 전달해야하며 해당 주 DateTime이 필요합니다.DATETIME에 의해 주어진 주중에 특정 평일을 얻으십시오

예에 대한
--Sunday-1 
--Monday-2 
--Tuesday-3 
--Wednesday-4 
--Thursday-5 
--Friday-6 
--Saturday-7 

DECLARE @DayOfWeek TINYINT = 1 
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133' 
SELECT DATEADD(wk, DATEDIFF(wk,0,@Date), @DayOfWeek) 

: 이것에 대한

, 나는 그 주에 Sunday입니다 2016-07-24 00:00:00처럼 날짜를 얻을 필요가있다.

어떤 아이디어?

+0

내가 그것을 포인트 *에 * 더 넣어 노력하고, 질문의 제목을 변경,이를 확인하시기 바랍니다! – Shnugo

답변

2

datetime 값을 사용하면 매우주의해야합니다! 특히 하루의 지수는 까다 롭습니다. 당신은 항상 문화 별 차이를 생각한다 :

--The first of January was a Friday in 2016 
DECLARE @testDate DATE = {d'2016-01-01'}; 

이라면 .. 닥터 버크, 독일어 문화 이것을 시도,이, 영어 문화와 같은 일요일

에 시작 --Now 월요일

SET LANGUAGE GERMAN; 
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in Germany the Friday was 5th day 

시작

SET LANGUAGE ENGLISH; 
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in English culture this is the 6th day 

- 다음 페이지는

0,123,238,959,633 모듈로 7로 그 값을 추가하여 배양 독립적를 얻을 수있다

이제 두 쿼리 모두 금요일에 같은 값인 6을 반환합니다.

이 예에서는 일요일을 첫 번째 요일로 표시하므로 주어진 요일의 일요일은 실제로 7 월 17 일이어야합니다. 귀하의 예상 생산량 (7 월 24 일)이 다음 주 첫날입니까?

이 시도 :

DECLARE @DayOfWeek TINYINT = 1; 
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133'; 
SELECT CAST(@Date + @DayOfWeek - (@@DATEFIRST + DATEPART(WEEKDAY,@Date)) % 7 AS DATE)