यदि आप केवल उन सभी रिकॉर्ड्स को ढूंढना चाहते हैं जहां प्राप्त तिथि आज है, और भविष्य में प्राप्त तिथियों के साथ रिकॉर्ड हैं, तो आप जो कर रहे हैं वह बहुत ही गलत है ... क्योंकि ऑपरेटर के बीच ऑपरेटर अनुमति देता है मूल्य जो समाप्ति सीमा के बराबर हैं, इसलिए आप प्राप्त तिथि = मध्यरात्रि के साथ रिकॉर्ड प्राप्त कर सकते हैं ...
यदि प्राप्त किए गए इंडेक्स का उपयोग करने की कोई आवश्यकता नहीं है, तो आपको केवल यह जांचना होगा कि वर्तमान दिनांक के साथ तारीख diff 0 है ...
Where DateDiff(day, received, getdate()) = 0
यह विधेय SARGable नहीं निश्चित रूप से है, इसलिए यह एक सूचकांक का उपयोग नहीं कर सकते हैं ... 0,123,इसलिए इस क्वेरी के लिए एक मुद्दा है तो, यह मानते हुए कि आप भविष्य में दिनांक प्राप्त हुआ है नहीं कर सकते हैं, मैं इस का प्रयोग करेंगे बजाय ...
Where Received >= DateAdd(day, DateDiff(Day, 0, getDate()), 0)
प्राप्त दिनांकों भविष्य में हो सकता है, तो आप शायद के रूप में कर रहे हैं सबसे कुशल के पास तुम हो सकता है के रूप में ... (सिवाय एक के बीच बदलने के> = और <)
स्रोत
2008-11-28 14:36:00
कृपया ध्यान दें कि आपके द्वारा चुने गए उत्तर का सबसे अच्छा प्रदर्शन तरीका नहीं है।आपका रास्ता सही तरीके से करीब है, आपको बस BETWEEN का उपयोग करने के बजाय> = और <पर स्विच करने की आवश्यकता है (जो दूसरी स्थिति पर <= जैसा है और गलत है)। – ErikE