Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

DATETIME द्वारा दिए गए सप्ताह के भीतर निश्चित कार्यदिवस प्राप्त करें

डेटाटाइम मानों के साथ आपको बहुत सावधान रहना चाहिए! विशेष रूप से एक दिन का सूचकांक मुश्किल है। आपको हमेशा संस्कृति विशिष्ट अंतरों के बारे में सोचना चाहिए:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संलग्न .mdf डेटाबेस का उपयोग करने के लिए Web.config में DB कनेक्शन स्ट्रिंग काम नहीं करेगी

  2. ExecuteNonQuery () सम्मिलित करने के लिए

  3. SQL सर्वर कनेक्शन स्ट्रिंग्स - डॉट (।) या (स्थानीय) या (लोकलडीबी)

  4. बल्क इंसर्ट रोटर्मिनेटर इश्यू

  5. बहुलता बाधा ने इकाई ढांचे का उल्लंघन किया 5