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