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

SQL सर्वर में सप्ताहांत (सोमवार से शुक्रवार) को छोड़कर दिनों की गणना करना

मैं हमेशा कैलेंडर तालिका , तो आप बस इसका उपयोग कर सकते हैं:

SELECT  COUNT(*)
FROM    dbo.CalendarTable
WHERE   IsWorkingDay = 1
AND     [Date] > @StartDate
AND     [Date] <= @EndDate;

चूंकि SQL को राष्ट्रीय छुट्टियों का कोई ज्ञान नहीं है, उदाहरण के लिए दो तिथियों के बीच सप्ताह के दिनों की संख्या हमेशा कार्य दिवसों की संख्या का प्रतिनिधित्व नहीं करती है। यही कारण है कि अधिकांश डेटाबेस के लिए कैलेंडर तालिका आवश्यक है। वे बहुत अधिक मेमोरी नहीं लेते हैं और बहुत सारे प्रश्नों को सरल बनाते हैं।

लेकिन अगर यह विकल्प नहीं है तो आप अपेक्षाकृत आसानी से तारीखों की एक तालिका तैयार कर सकते हैं और इसका उपयोग कर सकते हैं

SET DATEFIRST 1;
DECLARE @StartDate DATETIME = '20131103', 
        @EndDate DATETIME = '20131104';

-- GENERATE A LIST OF ALL DATES BETWEEN THE START DATE AND THE END DATE
WITH AllDates AS
(   SELECT  TOP (DATEDIFF(DAY, @StartDate, @EndDate))
            D = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.Object_ID), @StartDate)
    FROM    sys.all_objects a
            CROSS JOIN sys.all_objects b
)
SELECT  WeekDays = COUNT(*)
FROM    AllDates
WHERE   DATEPART(WEEKDAY, D) NOT IN (6, 7);

संपादित करें

यदि आपको दो दिनांक स्तंभों के बीच अंतर की गणना करने की आवश्यकता है, तो भी आप अपनी कैलेंडर तालिका का उपयोग इस प्रकार कर सकते हैं:

SELECT  t.ID,
        t.Date1,
        t.Date2,
        WorkingDays = COUNT(c.DateKey)
FROM    TestTable t
        LEFT JOIN dbo.Calendar c
            ON c.DateKey >= t.Date1
            AND c.DateKey < t.Date2
            AND c.IsWorkingDay = 1
GROUP BY t.ID, t.Date1, t.Date2;

SQL-Fiddle पर उदाहरण



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्ष से तिमाही प्रारंभ दिनांक और समाप्ति दिनांक प्राप्त करें

  2. मैं क्लॉज में उपनाम का उपयोग कैसे करूं?

  3. SQL सर्वर पिवट बनाम एकाधिक शामिल हों

  4. राउंड () SQL सर्वर में उदाहरण

  5. SQL सर्वर (लोकलडीबी)\v11.0 समझाया गया