कड़ाई से, विधि a
कम से कम संसाधन गहन है:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
एक ही कुल अवधि के लिए कम सीपीयू गहन साबित हुआ, किसी के हाथों पर बहुत अधिक समय के साथ एक लाख पंक्तियां:दिनांक + समय से दिनांक प्राप्त करने के लिए SQL सर्वर में सबसे प्रभावी तरीका?
मैंने इसी तरह के परिणामों के साथ कहीं और भी इसी तरह का परीक्षण देखा।
मुझे DATEADD/DATEDIFF पसंद है क्योंकि:
- varchar भाषा/डेटफॉर्मेट मुद्दों के अधीन है
उदाहरण:मेरी CASE अभिव्यक्ति गैर-निर्धारक क्यों है? - फ्लोट आंतरिक संग्रहण पर निर्भर करता है
- यह "0" आधार को बदलकर महीने के पहले दिन, कल आदि के लिए काम करता है
संपादित करें, अक्टूबर 2011
SQL Server 2008+ के लिए, आप date
पर CAST कर सकते हैं यानी CAST(getdate() AS date)
. या बस date
का उपयोग करें डेटाटाइप इसलिए नहीं time
हटाने के लिए।
संपादित करें, जनवरी 2012
यह कितना लचीला है इसका एक काम किया उदाहरण:एसक्यूएल सर्वर में गोल समय या तारीख के आंकड़े की गणना करने की आवश्यकता है
संपादित करें, मई 2012
इसका उपयोग WHERE क्लॉज और इसी तरह बिना सोचे-समझे न करें:किसी कॉलम में फंक्शन या CAST जोड़ने से इंडेक्स का उपयोग अमान्य हो जाता है। यहां नंबर 2 देखें सामान्य SQL प्रोग्रामिंग गलतियाँ
अब, इसमें बाद के SQL सर्वर ऑप्टिमाइज़र संस्करणों का एक उदाहरण है जो CAST को आज तक सही तरीके से प्रबंधित कर रहा है, लेकिन आम तौर पर यह एक बुरा विचार होगा...
संपादित करें, सितंबर 2018, datetime2 के लिए
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)