इस लेख में तारीख . को परिवर्तित करने के उदाहरण हैं एक datetime2 . के लिए मान SQL सर्वर में मान।
जब आप किसी तारीख . को रूपांतरित करते हैं datetime2 . के लिए मान , अतिरिक्त जानकारी को मूल्य में जोड़ा जाता है। ऐसा इसलिए है क्योंकि डेटाटाइम2 डेटा प्रकार में दिनांक और समय दोनों की जानकारी होती है। तारीख दूसरी ओर, डेटा प्रकार में केवल तारीख की जानकारी होती है।
डेटाटाइम2 डेटा प्रकार मूल रूप से डेटाटाइम . का विस्तार है डेटा प्रकार। इसकी एक बड़ी तिथि सीमा, एक बड़ी डिफ़ॉल्ट भिन्नात्मक सटीकता और वैकल्पिक उपयोगकर्ता-निर्दिष्ट सटीकता है।
किसी भी मामले में, डेटा प्रकार की परवाह किए बिना रूपांतरण प्रक्रिया बिल्कुल समान है। केवल अंतर ही जानकारी की मात्रा है जो तारीख . के बीच उपलब्ध है , डेटाटाइम और डेटाटाइम2 ।
उदाहरण 1 - निहित रूपांतरण
यहां तारीख . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और डेटाटाइम2 .
DECLARE @thedate date, @thedatetime2 datetime2 SET @thedate = '2020-12-01' SET @thedatetime2 = @thedate SELECT @thedate AS 'date', @thedatetime2 AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम तिथि . असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है एक datetime2 . के लिए मान चर।
हम देख सकते हैं कि तारीख चर में केवल दिनांक जानकारी होती है, जबकि datetime2 चर में दिनांक और समय दोनों की जानकारी होती है।
इसके अलावा, यदि हम इसे डेटाटाइम . में परिवर्तित करते हैं, तो हमें प्राप्त होने वाली समय की तुलना में अधिक समय की जानकारी मिलती है डेटा प्रकार।
जब आप तारीख . के बीच कनवर्ट करते हैं और डेटाटाइम2 डिफ़ॉल्ट सटीकता (7) का उपयोग करते हुए, समय घटक 00:00:00.0000000
. पर सेट है (00:00:00.000
. की तुलना में डेटाटाइम . के लिए ) यदि आप चाहें तो आप सटीकता को कम कर सकते हैं (नीचे देखें)। सटीकता को कम करने से मूल्य को संग्रहीत करने के लिए आवश्यक स्थान की मात्रा भी कम हो सकती है।
समय घटक के सभी शून्य होने का कारण यह है कि दिनांक मान में कोई समय की जानकारी नहीं होती है, इसलिए SQL सर्वर के लिए यह जानने का कोई तरीका नहीं है कि आप किस समय (यदि कोई हो) चाहते हैं।
उदाहरण 2 - समय बदलें
यदि आपको एक समय निर्दिष्ट करने की आवश्यकता है (लेकिन एक ही तिथि रखें), तो आप DATEADD()
का उपयोग कर सकते हैं ऐसा करने के लिए कार्य करें।
DECLARE @thedate date, @thedatetime2 datetime2 SET @thedate = '2020-12-01' SET @thedatetime2 = @thedate SET @thedatetime2 = DATEADD(hour, 8, @thedatetime2) SELECT @thedate AS 'date', @thedatetime2 AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
उदाहरण 3 - CAST() का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है तारीख . के बीच स्पष्ट रूप से रूपांतरित होने वाला कथन और डेटाटाइम2 .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime2) AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
तो हम निहित रूपांतरण के समान परिणाम प्राप्त करते हैं।
हम समय को इस तरह भी समायोजित कर सकते हैं:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime2)) AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
उदाहरण 4 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
. का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime2, @thedate) AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
और समय को एडजस्ट करना:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime2, @thedate)) AS 'datetime2';
परिणाम:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
उदाहरण 5 - शुद्धता
डेटाटाइम2 डेटा प्रकार आपको सटीक (डिफ़ॉल्ट 7 तक) निर्दिष्ट करने की अनुमति देता है। दूसरे शब्दों में, यदि आपको आवश्यकता नहीं है तो आपको पूरे 7 अंकों का उपयोग करने की आवश्यकता नहीं है।
उदाहरण:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime2(2), @thedate) AS 'datetime2(2)', CONVERT(datetime2(4), @thedate) AS 'datetime2(4)';
परिणाम:
+------------+------------------------+--------------------------+ | date | datetime2(2) | datetime2(4) | |------------+------------------------+--------------------------| | 2020-12-01 | 2020-12-01 00:00:00.00 | 2020-12-01 00:00:00.0000 | +------------+------------------------+--------------------------+
परिशुद्धता को कम करने का एक लाभ यह है कि यह मूल्य को संग्रहीत करने के लिए आवश्यक स्थान की मात्रा को भी कम कर सकता है। विशेष रूप से, 3 से कम परिशुद्धता के लिए 6 बाइट्स, सटीक 3 या 4 के लिए 7 बाइट्स, और अन्य सभी परिशुद्धता के लिए 8 बाइट्स की आवश्यकता होती है। हालांकि, ध्यान दें कि पहले बाइट का उपयोग सटीकता को संग्रहीत करने के लिए किया जाता है, इसलिए वास्तविक मान यहां इंगित भंडारण आकार है और साथ ही सटीकता को संग्रहीत करने के लिए 1 अतिरिक्त बाइट है।