अधिकांश प्रतिक्रियाओं में सुझाए गए MONTH और YEAR फ़ंक्शंस का उपयोग करने से नुकसान यह है कि SQL सर्वर आपके डेट कॉलम पर मौजूद किसी भी इंडेक्स का उपयोग करने में सक्षम नहीं होगा। यह एक बड़ी मेज पर प्रदर्शन को मार सकता है।
मैं एक DATETIME मान (जैसे @StartDate) को संग्रहीत कार्यविधि में पास करना चाहूंगा जो उस महीने के पहले दिन का प्रतिनिधित्व करता है जिसमें आप रुचि रखते हैं।
तब आप उपयोग कर सकते हैं
SELECT ... FROM ...
WHERE DateColumn >= @StartDate
AND DateColumn < DATEADD(month, 1, @StartDate)
यदि आपको संग्रहीत कार्यविधि के लिए अलग-अलग मापदंडों के रूप में महीने और वर्ष को पास करना होगा, तो आप CAT और CONVERT का उपयोग करके महीने के पहले दिन का प्रतिनिधित्व करने वाला DATETIME उत्पन्न कर सकते हैं, फिर ऊपर के रूप में आगे बढ़ें। यदि आप ऐसा करते हैं, तो मैं एक फ़ंक्शन लिखने की सलाह दूंगा जो पूर्णांक वर्ष, महीने, दिन के मूल्यों से एक DATETIME उत्पन्न करता है, उदाहरण के लिए SQL सर्वर ब्लॉग से निम्न ।
create function Date(@Year int, @Month int, @Day int)
returns datetime
as
begin
return dateadd(month,((@Year-1900)*12)+@Month-1,@Day-1)
end
go
क्वेरी तब बन जाती है:
SELECT ... FROM ...
WHERE DateColumn >= Date(@Year,@Month,1)
AND DateColumn < DATEADD(month, 1, Date(@Year,@Month,1))