लगभग सभी उत्तर और टिप्पणियाँ पेशेवरों और विपक्ष पर प्रकाश में भारी पड़े हैं। यहाँ सभी पेशेवरों और विपक्ष का एक संक्षिप्त विवरण है और साथ ही कुछ महत्वपूर्ण विपक्ष (नीचे # 2 में) मैंने केवल एक बार उल्लेख किया है या बिल्कुल भी नहीं देखा है।
- पेशेवरों:
1.1। अधिक आईएसओ अनुरूप (आईएसओ 8601) (हालांकि मुझे नहीं पता कि यह व्यवहार में कैसे आता है)।
1.2। अधिक रेंज (1/1/0001 से 12/31/9999 बनाम 1/1 / 1753-12 / 31/9999) (हालांकि अतिरिक्त रेंज, सभी वर्ष 1753 से पहले, पूर्व के अलावा संभवतः उपयोग नहीं की जाएगी।) ऐतिहासिक, खगोलीय, भूगर्भिक, आदि क्षुधा में)।
1.3। .NET के DateTimeप्रकार की सीमा का सटीक रूप से मेल खाता है (हालांकि दोनों कोई विशेष कोडिंग के साथ आगे और पीछे परिवर्तित होते हैं यदि मान लक्ष्य प्रकार की सीमा के भीतर हैं और सटीक और नीचे त्रुटि # गोलाई के अलावा 2.1 # को छोड़कर) होगा।
1.4। अधिक सटीक (100 नैनोसेकंड उर्फ 0.000,000,1 सेकंड। बनाम 3.33 मिलीसेकंड उर्फ 0.00,,33 सेकंड।) (हालांकि अतिरिक्त परिशुद्धता का उपयोग पूर्व इंजीनियरिंग के अलावा, इंजीनियरिंग / वैज्ञानिक ऐप में नहीं किया जाएगा)।
1.5। जब समान के लिए कॉन्फ़िगर किया गया (जैसा कि 1 मिली सेकेंड में "समान" (3.33 मिलीसेक में नहीं) जैसा कि इमान अबीदी ने दावा किया है) सटीकता के रूप में DateTime, कम जगह (7 बनाम 8 बाइट्स) का उपयोग करता है, लेकिन फिर निश्चित रूप से, आप हार जाएंगे। सटीक लाभ जो संभवतः दो में से एक है (अन्य रेंज है) सबसे अधिक संभावित रूप से अनपेक्षित लाभ होने की संभावना है।
- कान्स:
2.1। जब एक पैरामीटर को .NET में पास किया जाता है SqlCommand, तो आपको यह निर्दिष्ट करना होगा System.Data.SqlDbType.DateTime2कि क्या आप SQL सर्वर DateTimeकी सीमा और / या परिशुद्धता के बाहर मान दे रहे हैं , क्योंकि यह चूक करता है System.Data.SqlDbType.DateTime।
2.2। संख्यात्मक मानों और परिचालकों का उपयोग करते हुए SQL सर्वर अभिव्यक्तियों में निम्नलिखित के साथ / करने के लिए इसे अस्थायी रूप से / आसानी से एक फ़्लोटिंग-पॉइंट न्यूमेरिक में परिवर्तित किया जा सकता है (# दिन-तारीख के बाद से) मान।
2.2.1। # दिनों या आंशिक दिनों के जोड़ या घटाना। नोट: DateAddवर्कअराउंड के रूप में फ़ंक्शन का उपयोग करना तुच्छ नहीं है, जब आपको तिथि-समय के सभी भागों में नहीं तो कई पर विचार करने की आवश्यकता होती है।
2.2.2। "आयु" गणना के उद्देश्यों के लिए दो तारीखों के बीच का अंतर लें। नोट: आप DateDiffइसके बजाय केवल SQL सर्वर के फ़ंक्शन का उपयोग नहीं कर सकते , क्योंकि यह गणना नहीं करता है क्योंकि ageअधिकांश लोग इस बात की उम्मीद करेंगे कि यदि दो तारीख-बार एक कैलेंडर / घड़ी की तारीख-समय सीमा को पार करने के लिए होता है, तो निर्दिष्ट इकाइयों की सीमा यदि एक छोटे से अंश के लिए भी हो कि इकाई की है, यह अंतर यह है कि यूनिट के रूप में 1 बनाम 0. उदाहरण के लिए वापस लौटा देंगे, DateDiffमें Day'दो तिथि-समय की है केवल 1 मिलीसेकंड अलग 1 बनाम 0 (दिन) वापस आ जाएगी अगर उन तिथि-समय कर रहे हैं अलग-अलग कैलेंडर दिनों (अर्थात "1999-12-31 23: 59: 59.9999999" और "2000-01-01 00: 00: 00.0000000")। वही 1 मिलीसेकंड अंतर तिथि-समय यदि स्थानांतरित किया गया है ताकि वे एक कैलेंडर दिन को पार न करें, "डेटडिफ़" वापस कर देंगेDay 0 (दिनों) के ।
2.2.3। ले Avgबस को फिर से वापस "फ्लोट" में परिवर्तित करने के पहले और उसके बाद से तिथि-समय (एक सकल क्वेरी में) की DateTime।
नोट: DateTime2किसी संख्यात्मक में कनवर्ट करने के लिए, आपको निम्न सूत्र जैसा कुछ करना होगा जो अभी भी मान लेता है कि आपके मूल्य वर्ष 1970 से कम नहीं हैं (जिसका अर्थ है कि आप सभी अतिरिक्त रेंज प्लस 217 वर्ष खो रहे हैं। नोट: आप कर सकते हैं। अतिरिक्त सीमा के लिए अनुमति देने के लिए केवल सूत्र को समायोजित करने में सक्षम नहीं हो सकते क्योंकि आप संख्यात्मक अतिप्रवाह मुद्दों में चल सकते हैं।
25567 + (DATEDIFF(SECOND, {d '1970-01-01'}, @Time) + DATEPART(nanosecond, @Time) / 1.0E + 9) / 86400.0- स्रोत: " https://siderite.dev/blog/how-to-translate-t-sql-datetime2-to.html "
बेशक, आप भी कर सकते थे Castकरने के लिए DateTimeपहली (और यदि आवश्यक हो तो फिर से वापस करने के लिए DateTime2), लेकिन आप परिशुद्धता और रेंज (पूरे साल के लिए पहले 1753) के लाभों को खो देंगे DateTime2बनाम DateTimeजो prolly 2 सबसे बड़ी है और यह भी एक ही समय में prolly हैं 2 कम से कम संभावना की जरूरत है जो सवाल पूछता है कि इसका उपयोग क्यों करें जब आप फ़्लोटिंग-पॉइंट न्यूमेरिक (# दिनों का) जोड़ / घटाव / "उम्र" (बनाम DateDiff) / के लिए निहित / आसान रूपांतरण खो देते हैंAvg बछड़े लाभ जो एक बड़ा है मेरे अनुभव में।
Btw, Avgतारीख का समय एक महत्वपूर्ण उपयोग के मामले में (या कम से कम होना चाहिए) है। क) तिथि-समय (एक सामान्य आधार तिथि के बाद से) औसत अवधि प्राप्त करने में उपयोग के अलावा, अवधि (एक सामान्य अभ्यास) का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, ख) यह औसत तिथि क्या है, इस पर डैशबोर्ड-प्रकार के आंकड़े प्राप्त करने के लिए भी उपयोगी है। समय सीमा / पंक्तियों के समूह के दिनांक-समय के कॉलम में है। ग) एक स्तंभ में मानों की निगरानी / समस्या निवारण के लिए एक मानक (या कम से कम मानक होना चाहिए) तदर्थ क्वेरी जो कभी भी मान्य नहीं हो सकती है और / या अपवित्र होने की आवश्यकता हो सकती है, प्रत्येक मूल्य की गणना के लिए सूची बनाना है और (यदि उपलब्ध हो) Min, Avgऔर Maxउस समय से संबंधित दिनांक-टिकटों का मूल्य।