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

SQL सर्वर (T-SQL उदाहरण) में 'डेटाटाइमऑफ़सेट' को 'समय' में बदलें

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

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

समय दूसरी ओर डेटा प्रकार में केवल समय शामिल होता है। इसमें दिनांक शामिल नहीं है और इसमें समय क्षेत्र ऑफ़सेट शामिल नहीं है। हालांकि, डेटाटाइमऑफ़सेट . के समान यह आपको 0 और 7 के बीच एक भिन्नात्मक सेकंड भाग निर्दिष्ट करने की भी अनुमति देता है (time(n) का उपयोग करके) वाक्य - विन्यास)। इसकी सटीकता के आधार पर यह 3, 4, या 5 बाइट्स का उपयोग करता है।

जब आप किसी डेटाटाइमऑफ़सेट . को रूपांतरित करते हैं एक समय . के लिए मूल्य डेटा प्रकार, आप दिनांक भाग खो देते हैं। आप समय क्षेत्र ऑफ़सेट भी खो देते हैं। हालाँकि, आप भंडारण आकार को 8 और 10 बाइट्स से घटाकर 3, 4, या 5 बाइट्स कर सकते हैं। हालांकि, आप यह रूपांतरण केवल तभी करेंगे जब आपको दिनांक भाग या समय क्षेत्र ऑफ़सेट की आवश्यकता नहीं होगी।

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

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

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

DECLARE 
  @thedatetimeoffset datetimeoffset, 
  @thetime time;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SET @thetime = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thetime AS 'time';

परिणाम:

+------------------------------------+------------------+
| datetimeoffset                     | time             |
|------------------------------------+------------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 10:15:30.1234567 |
+------------------------------------+------------------+

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

यहां हम देख सकते हैं कि समय मान में केवल समय शामिल है (दिनांक घटक के बिना)। दिनांक और समय क्षेत्र ऑफ़सेट घटकों को मान से हटा दिया गया है।

इस उदाहरण में, दोनों डेटा प्रकार डिफ़ॉल्ट परिशुद्धता का उपयोग करते हैं (जिसके परिणामस्वरूप 7 दशमलव स्थान होते हैं)। इसका परिणाम डेटाटाइमऑफ़सेट . में होता है 10 बाइट्स और समय . का उपयोग करके मान 5 बाइट्स का उपयोग कर मान।

उदाहरण 2 - शुद्धता

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

DECLARE 
  @thedatetimeoffset datetimeoffset(7), 
  @thetime time(3);
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SET @thetime = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thetime AS 'time';

परिणाम:

+------------------------------------+------------------+
| datetimeoffset                     | time             |
|------------------------------------+------------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 10:15:30.1230000 |
+------------------------------------+------------------+

मेरा सिस्टम अनुगामी शून्य प्रदर्शित करता है, लेकिन बात यह है कि समय मूल मान द्वारा उपयोग किए जाने वाले 7 दशमलव स्थानों की तुलना में मान अब केवल 3 दशमलव स्थानों तक सटीक है।

सटीकता को कम करने के परिणामस्वरूप समय . भी हो सकता है मूल्य गोल किया जा रहा है। यहां एक उदाहरण दिया गया है:

DECLARE 
  @thedatetimeoffset datetimeoffset(7), 
  @thetime time(3);
SET @thedatetimeoffset = '2025-05-21 10:15:30.1235555 +10:30';
SET @thetime = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thetime AS 'time';

परिणाम:

+------------------------------------+------------------+
| datetimeoffset                     | time             |
|------------------------------------+------------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 10:15:30.1240000 |
+------------------------------------+------------------+

इस मामले में हम 124 . के एक भिन्नात्मक भाग के साथ समाप्त होते हैं 123 . के बजाय , क्योंकि निम्न अंक 5 या अधिक था।

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

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

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

परिणाम:

+------------------------------------+------------------+
| datetimeoffset                     | date             |
|------------------------------------+------------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 10:15:30.1234567 |
+------------------------------------+------------------+

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

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

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

परिणाम:

+------------------------------------+------------------+
| datetimeoffset                     | date             |
|------------------------------------+------------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 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 सर्वर क्वेरी डेटा प्रकार, नल नहीं, और प्राथमिक कुंजी बाधाओं के साथ तालिका में कॉलम की सूची प्राप्त करने के लिए

  2. एक स्क्रिप्ट से SQL क्वेरी की तुलना में संग्रहीत कार्यविधियाँ निष्पादित क्यों तेज़ हैं?

  3. EXISTS बनाम जॉइन और EXISTS क्लॉज का उपयोग

  4. एक्सएमएलएनएस के साथ ओपनएक्सएमएल:डीटी

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