डेटाटाइम मानों के साथ आपको बहुत सावधान रहना चाहिए! विशेष रूप से एक दिन का सूचकांक मुश्किल है। आपको हमेशा संस्कृति विशिष्ट अंतरों के बारे में सोचना चाहिए:
--The first of January was a Friday in 2016
DECLARE @testDate DATE = {d'2016-01-01'};
--मैं इसे जर्मन संस्कृति के साथ आजमाता हूं, यह सोमवार से शुरू होता है
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
- आप मॉड्यूल 7 के साथ उन मूल्यों को जोड़कर इस संस्कृति को स्वतंत्र प्राप्त कर सकते हैं
SET LANGUAGE GERMAN;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in Germany the Friday was 5th day
SET LANGUAGE ENGLISH;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in English culture this is the 6th day
अब दोनों प्रश्न शुक्रवार के लिए समान मान लौटाते हैं, 6
।
आपका उदाहरण रविवार को सप्ताह के पहले दिन के रूप में दिखाता है, इसलिए सप्ताह के रविवार को दिए गए दिन को वास्तव में 17 जुलाई होना चाहिए। आपका अपेक्षित आउटपुट (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)