में सभी रिकॉर्ड पुनर्प्राप्त करें मेरे पास डेटफिनिश नामक डेटाटाइम फ़ील्ड है। मुझे उन सभी रिकॉर्ड्स को पुनर्प्राप्त करने में सक्षम होना चाहिए जिनमें डेटफिनिश चालू माह/वर्ष के भीतर है।टीएसक्यूएल वर्तमान महीने/वर्ष
6
A
उत्तर
15
यदि आपके पास केवल थोड़ी सी पंक्तियां हैं, तो यह सभी पंक्तियों को प्राप्त करने के लिए करेगा जहां DateFinished
इस वर्ष के इस महीने में है।
SELECT *
FROM MyTable
WHERE Year(DateFinished) = Year(CURRENT_TIMESTAMP)
AND Month(DateFinished) = Month(CURRENT_TIMESTAMP)
यह हालांकि पंक्तियों की एक बड़ी संख्या में काफी धीमी गति से हो सकता है - जो मामले में का उपयोग कर DateAdd
, DatePart
और BETWEEN
शायद अधिक उपयुक्त है, और अनुक्रमित का लाभ ले सकते (मैं एक लिखने के लिए समय नहीं है उत्तर अभी उन लोगों को शामिल कर रहा है!)
9
बस एक विकल्प के रूप में - इसे दिनांक पर एक सूचकांक का उपयोग करना चाहिए।
SELECT *
FROM MyTable
WHERE DateFinished BETWEEN
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
AND
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)
आपका महीना हिस्सा बंद है? – Moose
@Moose धन्यवाद - अभी भी संपादन कर रहा था :-) – Bridge
यह काम करेगा - लेकिन यह आपके कॉलम पर 'वर्ष()' या 'माह()' का उपयोग करने से बहुत प्रभावी नहीं होगा मूल रूप से SQL सर्वर को किसी भी सूचकांक का उपयोग करने से रोकता है। यदि ओपी को अक्सर इसकी आवश्यकता होती है, तो यह दो ** गणना, लगातार ** कॉलम बनाने के लिए उपयोगी हो सकता है जो प्रत्येक पंक्ति के लिए माह/वर्ष धारण करते हैं और फिर उन पर क्वेरी करते हैं। –