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

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

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

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

डेटाटाइमऑफ़सेट डेटा प्रकार आपको datetimeoffset(n) का उपयोग करके 0 से 7 तक एक भिन्नात्मक सेकंड सटीक निर्दिष्ट करने की अनुमति देता है वाक्य - विन्यास। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह 7 (डिफ़ॉल्ट) का उपयोग करेगा। इसमें टाइम ज़ोन ऑफ़सेट भी है। उपयोग की जा रही सटीकता के आधार पर इस डेटा प्रकार का भंडारण आकार या तो 8, 9, या 10 बाइट्स है।

डेटाटाइम2 डेटा प्रकार आपको 0 से 7 तक (datetime2(n) का उपयोग करके एक भिन्नात्मक सेकंड सटीकता निर्दिष्ट करने की अनुमति देता है) वाक्य - विन्यास)। इसमें समय क्षेत्र जागरूकता नहीं है। उपयोग की जा रही परिशुद्धता के आधार पर इसका भंडारण आकार या तो 6, 7 या 8 है।

ध्यान दें कि यहाँ सूचीबद्ध संग्रहण मात्राएँ Microsoft दस्तावेज़ों में सूचीबद्ध मात्राएँ हैं। हालाँकि, ये डेटा प्रकार परिशुद्धता को संग्रहीत करने के लिए 1 बाइट का भी उपयोग करते हैं। इसलिए, भंडारण आवश्यकताओं की अधिक संपूर्ण तस्वीर के लिए यहां सूचीबद्ध मात्रा में 1 बाइट जोड़ें।

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

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

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

परिणाम:

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

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

इस उदाहरण में, दोनों डेटा प्रकार डिफ़ॉल्ट परिशुद्धता (7 दशमलव स्थान) का उपयोग करते हैं। इसलिए, भिन्नात्मक भाग 1234567 था दोनों परिणामों के लिए।

हम यह भी देखते हैं कि समय क्षेत्र ऑफ़सेट को छोटा कर दिया गया था - datetime2 डेटा प्रकार में कोई समय क्षेत्र जागरूकता नहीं है।

इस रूपांतरण में, भंडारण का आकार 10 बाइट्स से कम हो गया है (डेटाटाइमऑफ़सेट . के लिए) ) से 8 बाइट्स (datetime2 . के लिए) ), हालांकि ध्यान दें कि परिशुद्धता को स्टोर करने के लिए 1 बाइट जोड़ा जाता है।

उदाहरण 2 - भिन्न परिशुद्धता

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

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

परिणाम:

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

इस उदाहरण में, डेटाटाइमऑफ़सेट 7 . का पैमाना है लेकिन डेटाटाइम2 मान का पैमाना केवल 3 . होता है . इसलिए, फिट होने के लिए भिन्नात्मक सेकंड को छोटा कर दिया गया था।

ध्यान दें कि इससे गोलाई हो सकती है। यहां एक उदाहरण दिया गया है जहां datetime2 . का भिन्नात्मक भाग मान 124 . तक पूर्णांकित हो जाता है ।

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

परिणाम:

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

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

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

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

परिणाम:

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

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

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

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

परिणाम:

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

  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 सर्वर इन-मेमोरी OLTP:मूल बातें

  2. SQL सर्वर (MSSQL DBA) शुरुआती डेटाबेस प्रशासकों के लिए डेटाबेस ट्यूटोरियल

  3. SQL सर्वर लेनदेन संबंधी प्रतिकृति समस्याओं का निवारण

  4. SQL सर्वर में datetime2 बनाम datetimeoffset:क्या अंतर है?

  5. दिनांक में एक दिन जोड़ने के लिए दिनांक जोड़ें का उपयोग करते हुए SQL सर्वर 2005