शायद ऐसे बहुत कम उपयोग के मामले हैं जिनके कारण आप डेटाटाइम2 . को रूपांतरित कर सकते हैं डेटाटाइम . के लिए मान एसक्यूएल सर्वर में। विशेष रूप से, डेटाटाइम2 डेटा प्रकार को डेटाटाइम . के समान संग्रहण आकार का उपयोग करने के लिए सेट किया जा सकता है , लेकिन उच्च परिशुद्धता के साथ। इसलिए ज़्यादातर मामलों में आप datetime2 . के साथ बेहतर स्थिति में होंगे डेटाटाइम . की तुलना में . Microsoft datetime2 . का उपयोग करने की भी अनुशंसा करता है डेटाटाइम . के बजाय ।
हालाँकि, यदि आप स्वयं को उस स्थिति में पाते हैं जहाँ आपको यह रूपांतरण करने की आवश्यकता है, तो इस लेख में कुछ उदाहरण और विचार हैं जो सहायक हो सकते हैं।
जब आप किसी डेटाटाइम2 . को रूपांतरित करते हैं डेटाटाइम . के लिए मान , परिणामी मान उस भिन्नात्मक सेकंड पर निर्भर करेगा जो datetime2 . को असाइन किया गया था मूल्य, साथ ही इसकी सटीकता।
डेटाटाइम2 डेटा प्रकार आपको 0 से 7 तक भिन्नात्मक सेकंड सटीक निर्दिष्ट करने की अनुमति देता है। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह 7 (डिफ़ॉल्ट) का उपयोग करेगा।
डेटाटाइम दूसरी ओर डेटा प्रकार, इसके भिन्नात्मक सेकंड भाग के लिए अधिकतम 3 अंक होते हैं। इसकी सटीकता .000, .003, या .007 सेकंड की वृद्धि के लिए गोल है।
इसलिए, यदि datetime2 3 के पैमाने का उपयोग करता है, तो परिणामी मान मूल मान के बहुत करीब (यदि समान नहीं है) होगा। हालांकि, डेटाटाइम . की कम सटीकता के कारण , परिणाम भिन्न हो सकते हैं, क्योंकि इसके द्वारा किए जाने वाले पूर्णांकन के कारण।
उदाहरण 1 - निहित रूपांतरण
यहां datetime2 . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और डेटाटाइम .
DECLARE @thedatetime2 datetime2, @thedatetime datetime; SET @thedatetime2 = '2025-05-21 10:15:30.1234567'; SET @thedatetime = @thedatetime2; SELECT @thedatetime2 AS 'datetime2', @thedatetime AS 'datetime';
परिणाम:
+-----------------------------+-------------------------+ | datetime2 | datetime | |-----------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 | +-----------------------------+-------------------------+
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम datetime2 असाइन करने का प्रयास करते हैं, तो SQL सर्वर परदे के पीछे एक अंतर्निहित रूपांतरण करता है एक डेटाटाइम . के लिए मान चर।
हम देख सकते हैं कि डेटाटाइम वेरिएबल में फ्रैक्शनल सेकंड्स की सटीकता कम होती है, और हमारे पास 123 . का एक फ्रैक्शनल पार्ट होता है भले ही मूल भिन्नात्मक भाग 1234567 . था .
इस मामले में, कोई गोलाई नहीं की गई थी।
उदाहरण 2 - सटीक/सटीकता और गोलाई
डेटाटाइम डेटा प्रकार .000, .003, या .007 सेकंड की वृद्धि के लिए गोल है। यहां तक कि अगर आप इसे स्पष्ट रूप से किसी अन्य मान पर सेट करते हैं, तो इसे गोल किया जाएगा।
यह किसी अन्य डेटा प्रकार से कनवर्ट करते समय भी लागू होता है (जैसे कि हम यहां क्या कर रहे हैं)।
यहां एक उदाहरण दिया गया है जो दर्शाता है कि मेरा क्या मतलब है।
DECLARE @thedatetime2 datetime2, @thedatetime datetime; SET @thedatetime2 = '2025-05-21 10:15:30.1256789'; SET @thedatetime = @thedatetime2; SELECT @thedatetime2 AS 'datetime2', @thedatetime AS 'datetime';
परिणाम:
+-----------------------------+-------------------------+ | datetime2 | datetime | |-----------------------------+-------------------------| | 2025-05-21 10:15:30.1256789 | 2025-05-21 10:15:30.127 | +-----------------------------+-------------------------+
इस उदाहरण में, मैंने datetime2 . के भिन्नात्मक सेकंड सेट किए हैं मान 1256789
लेकिन डेटाटाइम इसे
127
. तक गोल करें (क्योंकि इसे केवल .000, .003, या .007 सेकंड की वृद्धि के लिए पूर्णांकित किया जा सकता है)।
यह नोट करना महत्वपूर्ण है कि यह तब भी सत्य होगा, भले ही हम datetime2 को केवल 3 भिन्नात्मक सेकंड निर्दिष्ट करें। मूल्य।
उदाहरण:
DECLARE @thedatetime2 datetime2(3), @thedatetime datetime; SET @thedatetime2 = '2025-05-21 10:15:30.125'; SET @thedatetime = @thedatetime2; SELECT @thedatetime2 AS 'datetime2', @thedatetime AS 'datetime';
परिणाम:
+-------------------------+-------------------------+ | datetime2 | datetime | |-------------------------+-------------------------| | 2025-05-21 10:15:30.125 | 2025-05-21 10:15:30.127 | +-------------------------+-------------------------+
यह मूल datetime2 . को होने वाली किसी भी राउंडिंग के बारे में जागरूक होने के लिए भी भुगतान करता है मूल्य। डेटाटाइम2 यदि हम किसी मान को उसके स्वयं के पैमाने से अधिक भिन्नात्मक सेकंड के साथ निर्दिष्ट करने का प्रयास करते हैं तो मान को स्वयं पूर्णांकित किया जा सकता है।
उदाहरण:
DECLARE @thedatetime2 datetime2(3), @thedatetime datetime; SET @thedatetime2 = '2025-05-21 10:15:30.1256789'; SET @thedatetime = @thedatetime2; SELECT @thedatetime2 AS 'datetime2', @thedatetime AS 'datetime';
परिणाम:
+-------------------------+-------------------------+ | datetime2 | datetime | |-------------------------+-------------------------| | 2025-05-21 10:15:30.126 | 2025-05-21 10:15:30.127 | +-------------------------+-------------------------+
इस मामले में, मैं 1256789 . के भिन्नात्मक भाग के साथ मान निर्दिष्ट करने का प्रयास करता हूं . हालांकि, क्योंकि datetime2(3) मान में केवल 3 का पैमाना होता है, यह केवल 3 दशमलव स्थानों का समर्थन कर सकता है, और इस मामले में, अंतिम अंक को गोल किया जाता है (क्योंकि निम्न अंक 5 या अधिक है)।
दोनों datetime2(3) और डेटाटाइम भंडारण स्थान की समान मात्रा (8 बाइट्स) का उपयोग करें। डेटाटाइम2(3) डेटा प्रकार वास्तव में डेटा को स्टोर करने के लिए 7 बाइट्स का उपयोग करता है, लेकिन अतिरिक्त 1 बाइट सटीकता को स्टोर करने के लिए।
उदाहरण 3 - CAST() का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है datetime2 . के बीच स्पष्ट रूप से कनवर्ट करने के लिए कथन और डेटाटाइम .
DECLARE @thedatetime2 datetime2; SET @thedatetime2 = '2025-05-21 10:15:30.1234567'; SELECT @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS datetime) AS 'datetime';
परिणाम:
+-----------------------------+-------------------------+ | datetime2 | datetime | |-----------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 | +-----------------------------+-------------------------+
उदाहरण 4 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
. का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thedatetime2 datetime2; SET @thedatetime2 = '2025-05-21 10:15:30.1234567'; SELECT @thedatetime2 AS 'datetime2', CONVERT(datetime, @thedatetime2) AS 'datetime';
परिणाम:
+-----------------------------+-------------------------+ | datetime2 | datetime | |-----------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 | +-----------------------------+-------------------------+