2012-12-05 8 views
6

में सभी रिकॉर्ड पुनर्प्राप्त करें मेरे पास डेटफिनिश नामक डेटाटाइम फ़ील्ड है। मुझे उन सभी रिकॉर्ड्स को पुनर्प्राप्त करने में सक्षम होना चाहिए जिनमें डेटफिनिश चालू माह/वर्ष के भीतर है।टीएसक्यूएल वर्तमान महीने/वर्ष

उत्तर

15

यदि आपके पास केवल थोड़ी सी पंक्तियां हैं, तो यह सभी पंक्तियों को प्राप्त करने के लिए करेगा जहां DateFinished इस वर्ष के इस महीने में है।

SELECT * 
FROM MyTable 
WHERE Year(DateFinished) = Year(CURRENT_TIMESTAMP) 
       AND Month(DateFinished) = Month(CURRENT_TIMESTAMP) 

यह हालांकि पंक्तियों की एक बड़ी संख्या में काफी धीमी गति से हो सकता है - जो मामले में का उपयोग कर DateAdd, DatePart और BETWEEN शायद अधिक उपयुक्त है, और अनुक्रमित का लाभ ले सकते (मैं एक लिखने के लिए समय नहीं है उत्तर अभी उन लोगों को शामिल कर रहा है!)

+0

आपका महीना हिस्सा बंद है? – Moose

+0

@Moose धन्यवाद - अभी भी संपादन कर रहा था :-) – Bridge

+0

यह काम करेगा - लेकिन यह आपके कॉलम पर 'वर्ष()' या 'माह()' का उपयोग करने से बहुत प्रभावी नहीं होगा मूल रूप से SQL सर्वर को किसी भी सूचकांक का उपयोग करने से रोकता है। यदि ओपी को अक्सर इसकी आवश्यकता होती है, तो यह दो ** गणना, लगातार ** कॉलम बनाने के लिए उपयोगी हो सकता है जो प्रत्येक पंक्ति के लिए माह/वर्ष धारण करते हैं और फिर उन पर क्वेरी करते हैं। –

9

बस एक विकल्प के रूप में - इसे दिनांक पर एक सूचकांक का उपयोग करना चाहिए।

SELECT * 
FROM MyTable 
WHERE DateFinished BETWEEN 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 
    AND 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0) 
+4

इसमें अगले महीने का पहला शामिल है, मैं अंतिम पंक्ति बनाकर इससे बचता हूं: DATEADD (DAY, -1, DATEADD (माह, डेटाडिफ़ (माह, 0, GETDATE()) + 1, 0)) – PCurd

+0

अच्छी पकड़, मैंने यह खो दिया। – Moose