ऐसा करने का सबसे उचित तरीका डेटाटाइम मानों के समय भाग को अलग करना और परिणामों की तुलना करना है, और डेटाटाइम से समय भाग को अलग करने का सबसे अच्छा तरीका इस प्रकार है:
cast(current_timestamp as date)
मैं एक ऐसी प्रक्रिया का उपयोग और समर्थन करता था जो निम्नलिखित दो पंक्तियों में से एक की तरह दिखती थी:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
लेकिन अब जबकि Sql सर्वर के पास Date
. है प्रकार, जिसमें समय घटक नहीं है, उन तकनीकों में से किसी एक का उपयोग करने का कोई कारण नहीं है।
ध्यान में रखने वाली एक और बात यह है कि यह अभी भी एक प्रश्न को रोक देगा यदि आपको इसे प्रत्येक पंक्ति के लिए दो डेटाटाइम मानों के लिए करने की आवश्यकता है जहां खंड या स्थिति में शामिल हों। यदि संभव हो तो आप इसे किसी भी तरह से कारक बनाना चाहते हैं, इसलिए जितना संभव हो सके इसकी पूर्व-गणना की जाती है, उदाहरण के लिए एक दृश्य या गणना कॉलम का उपयोग करना।
अंत में, ध्यान दें कि DATEDIFF फ़ंक्शन पार की गई सीमाओं की संख्या की तुलना करता है। इसका अर्थ है '2009-09-14 11:59:59'
. के बीच के दिनों में दिनांकित और '2009-09-15 00:00:01'
1 है, भले ही केवल 2 सेकंड बीत चुके हों, लेकिन DATEDIFF '2009-09-15 00:00:01'
के बीच के दिनों में और '2009-09-15 11:59:59'
अभी भी शून्य है, भले ही 86,398 सेकंड बीत चुके हों। यह वास्तव में वहां के समय के हिस्से, केवल सीमाओं के बारे में बिल्कुल भी परवाह नहीं करता है। आपकी क्वेरी क्या करने का प्रयास कर रही है, इस पर निर्भर करते हुए, आप अपने लाभ के लिए इसका उपयोग करने में सक्षम हो सकते हैं।