इस लेख में डेटाटाइमऑफ़सेट . को रूपांतरित करने के उदाहरण हैं स्मॉलडेटटाइम . के लिए मान एसक्यूएल सर्वर में।
जब आप किसी डेटाटाइमऑफ़सेट . को रूपांतरित करते हैं स्मॉलडेटटाइम . के लिए मान , दिनांक और घंटे कॉपी किए जाते हैं। मिनटों को गोल किया जाता है (सेकंड मान के आधार पर) और सेकंड को 0 पर सेट किया जाता है।
डेटाटाइमऑफ़सेट डेटा प्रकार आपको 0 से 7 तक एक भिन्नात्मक सेकंड सटीकता निर्दिष्ट करने की अनुमति देता है। यह datetimeoffset(n)
का उपयोग करके किया जाता है। वाक्य - विन्यास। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह 7 (डिफ़ॉल्ट) का उपयोग करेगा। इसमें टाइम ज़ोन ऑफ़सेट भी है। इस डेटा प्रकार का भंडारण आकार या तो 8, 9, या 10 बाइट्स (सटीकता के लिए प्लस 1 बाइट) है, जो उपयोग की जा रही सटीकता पर निर्भर करता है।
स्मॉलडेटटाइम दूसरी ओर डेटा प्रकार, समय क्षेत्र जागरूकता नहीं है, और इसलिए, इसमें कोई समय क्षेत्र ऑफसेट शामिल नहीं है। इसमें कोई भिन्नात्मक सेकंड भी नहीं होता है, और इसका सेकंड घटक हमेशा शून्य (:00) पर सेट होता है। इसकी सटीकता निकटतम मिनट तक है। इस डेटा प्रकार का संग्रहण आकार 4 बाइट्स पर निश्चित होता है।
उदाहरण 1 - निहित रूपांतरण
यहां डेटाटाइमऑफ़सेट . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और स्मॉलडेटटाइम .
DECLARE @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SET @thesmalldatetime = @thedatetimeoffset; SELECT @thedatetimeoffset AS 'datetimeoffset', @thesmalldatetime AS 'smalldatetime';
परिणाम:
+------------------------------------+---------------------+ | datetimeoffset | smalldatetime | |------------------------------------+---------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+---------------------+
यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम डेटाटाइमऑफ़सेट असाइन करने का प्रयास करते हैं, तो SQL सर्वर पर्दे के पीछे एक अंतर्निहित रूपांतरण करता है। स्मॉलडेटटाइम . के लिए मान चर।
हम देख सकते हैं कि स्मॉलडेटटाइम वेरिएबल में कोई भिन्नात्मक सेकंड सटीक नहीं है, और इसके सेकंड को शून्य पर सेट किया गया है। साथ ही, मिनटों को गोल कर दिया गया है, इस तथ्य के कारण कि मूल मान का सेकंड मान 30 था।
एक अन्य अवलोकन यह है कि समय क्षेत्र ऑफ़सेट को छोटा कर दिया गया था - स्मॉलडेटटाइम डेटा प्रकार में कोई समय क्षेत्र जागरूकता नहीं है।
इस रूपांतरण में, डेटाटाइमऑफ़सेट के लिए संग्रहण आकार 10 बाइट्स (सटीकता की गणना करने पर 11 बाइट्स) से कम हो गया है , स्मॉलडेटटाइम . के लिए 4 बाइट तक .
उदाहरण 2 - CAST() का उपयोग करके स्पष्ट रूपांतरण
यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST()
. का उपयोग करता हूं सीधे SELECT
. के अंदर काम करता है डेटाटाइमऑफ़सेट . के बीच स्पष्ट रूप से कनवर्ट करने के लिए कथन और स्मॉलडेटटाइम .
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS smalldatetime) AS 'smalldatetime';
परिणाम:
+------------------------------------+-------------------------+ | datetimeoffset | smalldatetime | |------------------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+-------------------------+
उदाहरण 3 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण
यहां CONVERT()
. का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST()
के बजाय फ़ंक्शन करें .
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT(smalldatetime, @thedatetimeoffset) AS 'smalldatetime';
परिणाम:
+------------------------------------+-------------------------+ | datetimeoffset | smalldatetime | |------------------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+-------------------------+