Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर (T-SQL उदाहरण) में 'datetime2' को 'datetimeoffset' में बदलें

इस लेख में datetime2 . को रूपांतरित करने के उदाहरण हैं एक डेटाटाइमऑफ़सेट . के लिए मान SQL सर्वर में मान।

जब आप किसी डेटाटाइम2 . को रूपांतरित करते हैं डेटाटाइमऑफ़सेट . का मान , परिणामी मान भिन्नात्मक सेकंड की सटीकता पर निर्भर करेगा जो प्रत्येक डेटा प्रकार को असाइन किया गया है, साथ ही आपके द्वारा निर्दिष्ट किसी भी समय क्षेत्र ऑफ़सेट पर निर्भर करेगा।

दोनों डेटा प्रकार आपको 0 से 7 तक एक भिन्नात्मक सेकंड सटीकता निर्दिष्ट करने की अनुमति देते हैं। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो 7 के डिफ़ॉल्ट पैमाने का उपयोग किया जाता है।

डेटाटाइमऑफ़सेट डेटा प्रकार में एक समय क्षेत्र ऑफ़सेट शामिल होता है और किसी भी ऑफ़सेट को मूल मान में संरक्षित कर सकता है। हालांकि, डेटाटाइम2 कोई समय क्षेत्र जागरूकता नहीं है, इसलिए संरक्षित करने के लिए कोई मौजूदा मूल्य नहीं हैं। इस स्थिति में, समय क्षेत्र डिफ़ॉल्ट रूप से +00:00 तक ऑफ़सेट हो जाता है।

TODATETIMEOFFSET() फ़ंक्शन को विशेष रूप से दिनांक/समय मान को datetimeoffset . में बदलने के लिए डिज़ाइन किया गया था और एक समय क्षेत्र ऑफसेट जोड़ें। हालाँकि, इस विकल्प के संबंध में मेरी टिप्पणियाँ (और उदाहरण) नीचे देखें।

उदाहरण 1 - निहित रूपांतरण

सबसे पहले, यहां datetime2 . के बीच निहित रूपांतरण का एक उदाहरण दिया गया है और डेटाटाइमऑफ़सेट .

DECLARE 
  @thedatetime2 datetime2(7), 
  @thedatetimeoffset datetimeoffset(7);
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedatetimeoffset = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedatetimeoffset AS 'datetimeoffset(7)';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2                   | datetimeoffset(7)                  |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234567 +00:00 |
+-----------------------------+------------------------------------+

यह एक अंतर्निहित रूपांतरण है क्योंकि हम इसे स्पष्ट रूप से परिवर्तित करने के लिए रूपांतरण फ़ंक्शन (जैसे नीचे वाले) का उपयोग नहीं कर रहे हैं। इस मामले में, जब हम datetime2 असाइन करने का प्रयास करते हैं, तो SQL सर्वर परदे के पीछे एक अंतर्निहित रूपांतरण करता है एक डेटाटाइमऑफ़सेट . के लिए मान चर।

हम देख सकते हैं कि डेटाटाइमऑफ़सेट वेरिएबल datetime2 . के समान सटीकता का उपयोग करने में सक्षम है मान (7 दशमलव स्थान)। हम +00:00 . के समय क्षेत्र ऑफसेट के साथ भी समाप्त होते हैं .

7 भिन्नात्मक सेकंड का सटीक उपयोग करने से डेटाटाइमऑफ़सेट . का कारण बनता है भंडारण के लिए 11 बाइट्स (डेटा के लिए 10 और सटीक के लिए 1 बाइट) का उपयोग करने के लिए। डेटाटाइम2 टाइप 9 बाइट्स (डेटा के लिए 8 और सटीक के लिए 1 बाइट) का उपयोग करता है जब 7. के पैमाने का उपयोग करते हैं।

हालाँकि, आप 7 को कम संख्या से बदलकर सटीकता को कम कर सकते हैं।

उदाहरण 2 - गोलाई

अगर डेटाटाइमऑफ़सेट datetime2 . की तुलना में कम सटीकता है मान, इसे पूर्णांकित किया जाएगा।

यहां एक उदाहरण दिया गया है:

DECLARE 
  @thedatetime2 datetime2(7), 
  @thedatetimeoffset datetimeoffset(6);
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedatetimeoffset = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2(7)',
  @thedatetimeoffset AS 'datetimeoffset(6)';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2(7)                | datetimeoffset(6)                  |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234570 +00:00 |
+-----------------------------+------------------------------------+

इस उदाहरण में, datetime2 मान का पैमाना 7 है लेकिन डेटाटाइमऑफ़सेट मान का पैमाना केवल 6 है। इसलिए, इसकी सटीकता केवल 6 दशमलव स्थानों तक है, और इसका छठा अंक 7 (6 के बजाय) तक हो जाता है।

उदाहरण 3 - CAST() का उपयोग करके स्पष्ट रूपांतरण

यहां स्पष्ट रूपांतरण का एक उदाहरण दिया गया है। इस मामले में, मैं CAST() . का उपयोग करता हूं सीधे SELECT . के अंदर काम करता है datetime2 . के बीच स्पष्ट रूप से कनवर्ट करने के लिए कथन और डेटाटाइमऑफ़सेट .

DECLARE @thedatetime2 datetime2;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SELECT 
  @thedatetime2 AS 'datetime2',
  CAST(@thedatetime2 AS datetimeoffset) AS 'datetimeoffset';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2                   | datetimeoffset                     |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234567 +00:00 |
+-----------------------------+------------------------------------+

उदाहरण 4 - CONVERT() का उपयोग करके स्पष्ट रूपांतरण

यहां CONVERT() . का उपयोग करके स्पष्ट रूपांतरण का एक उदाहरण दिया गया है CAST() के बजाय फ़ंक्शन करें .

DECLARE @thedatetime2 datetime2;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(datetimeoffset, @thedatetime2) AS 'datetimeoffset';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2                   | datetimeoffset                     |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234567 +00:00 |
+-----------------------------+------------------------------------+

उदाहरण 5 - समय क्षेत्र ऑफ़सेट बदलना

अगर आप datetime2 . से कनवर्ट कर रहे हैं करने के लिए डेटाटाइमऑफ़सेट , आप शायद इसे टाइमज़ोन ऑफ़सेट के लिए कर रहे हैं। यह भी अत्यधिक संभावना है कि आपको डिफ़ॉल्ट +00:00 के अलावा किसी अन्य मान की आवश्यकता होगी।

सौभाग्य से, आप TODATETIMEOFFSET() . का उपयोग कर सकते हैं ऑफ़सेट बदलने के लिए कार्य करता है।

आप इस फ़ंक्शन का उपयोग मूल datetime2 . को रूपांतरित करने के लिए भी कर सकते हैं एक डेटाटाइमऑफ़सेट . के लिए मान मूल्य। यह फ़ंक्शन किसी भी दिनांक/समय मान को स्वीकार करता है जो datetime2 . को हल कर सकता है मान, और ऑफ़सेट मान.

यहां एक उदाहरण दिया गया है:

DECLARE @thedatetime2 datetime2, @thedatetimeoffset datetimeoffset;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedatetimeoffset = TODATETIMEOFFSET(@thedatetime2, '+07:00');
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedatetimeoffset AS 'datetimeoffset';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2                   | datetimeoffset                     |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234567 +07:00 |
+-----------------------------+------------------------------------+

और यहां SELECT . में फ़ंक्शन का उपयोग करने का एक उदाहरण दिया गया है कथन:

DECLARE @thedatetime2 datetime2 = '2025-05-21 10:15:30.1234567';
SELECT 
  @thedatetime2 AS 'datetime2',
  TODATETIMEOFFSET(@thedatetime2, '+07:00') AS 'datetimeoffset';

परिणाम:

+-----------------------------+------------------------------------+
| datetime2                   | datetimeoffset                     |
|-----------------------------+------------------------------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.1234567 +07:00 |
+-----------------------------+------------------------------------+

TODATETIMEOFFSET() . के बारे में एक महत्वपूर्ण बिंदु कार्य यह है कि यह उसी भिन्नात्मक परिशुद्धता का उपयोग करता है जैसे दिनांक/समय तर्क इसे पारित किया गया है।

इसलिए, यदि आपका datetime2 डेटाटाइमऑफ़सेट . की तुलना में कम सटीकता का उपयोग करता है , आप इसे हमेशा एक उच्च परिशुद्धता वाले चर के लिए पुन:असाइन कर सकते हैं, फिर उस परिवर्तित मान को TODATETIMEOFFSET() पर पास कर सकते हैं ।

उदाहरण:

DECLARE @lowprecision datetime2(3), @highprecision datetime2(7);
SET @lowprecision = '2025-05-21 10:15:30.123';
SET @highprecision = @lowprecision;
SELECT 
  @lowprecision AS 'lowprecision',
  @highprecision AS 'highprecision',
  TODATETIMEOFFSET(@highprecision, '+07:00') AS 'Modified';

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

lowprecision  | 2025-05-21 10:15:30.123
highprecision | 2025-05-21 10:15:30.1230000
Modified      | 2025-05-21 10:15:30.1230000 +07:00

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL क्वेरी द्वारा किसी विशेष डेटाबेस के सभी तालिका नाम प्राप्त करें?

  2. एसक्यूएल सर्वर 2016

  3. SQL सर्वर में NULL को किसी अन्य मान से कैसे बदलें - ISNULL ()

  4. अधिक उन्नत क्वेरी चलाते समय ऑब्जेक्ट बंद होने पर ऑपरेशन की अनुमति नहीं है

  5. TODATETIMEOFFSET () SQL सर्वर में उदाहरण