मैं हमेशा कैलेंडर तालिका , तो आप बस इसका उपयोग कर सकते हैं:
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;