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

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

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

जब आप समय . को रूपांतरित करते हैं डेटाटाइमऑफ़सेट . का मान , तिथि '1900-01-01' पर सेट है और समय की प्रतिलिपि बनाई गई है। एक समय क्षेत्र ऑफ़सेट जोड़ा जाता है और +00:00 पर सेट किया जाता है।

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

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

DECLARE @thetime time;
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1234567 +00:00 |
+------------------+------------------------------------+

तो एक दिनांक भाग जोड़ा जाता है और '1900-01-01' पर सेट किया जाता है, समय की प्रतिलिपि बनाई जाती है, और एक समय क्षेत्र ऑफ़सेट जोड़ा जाता है और +00:00 पर सेट किया जाता है।

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

पिछले उदाहरण में, दोनों डेटा प्रकार अपनी डिफ़ॉल्ट सटीकता/पैमाने (7) का उपयोग करते हैं। ऐसा इसलिए है क्योंकि मैंने कोष्ठक में कोई पैमाना नहीं जोड़ा है (पैमाना भिन्नात्मक सेकंड की सटीकता निर्धारित करता है)। 7 के पैमाने का उपयोग करके, हम देख सकते हैं कि दोनों डेटा प्रकार एक समय मान का प्रतिनिधित्व करने में सक्षम हैं जो कि 7 दशमलव स्थानों के लिए सटीक है।

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

स्पष्ट होने के लिए, पैमाना किसी संख्या में दशमलव बिंदु के दाईं ओर अंकों की संख्या है। परिशुद्धता संख्या में अंकों की कुल संख्या है।

यदि आवश्यक हो तो हम भिन्नात्मक सेकंड की सटीकता को कम कर सकते हैं।

यहां कुछ उदाहरण दिए गए हैं जो प्रदर्शित करते हैं कि क्या होता है जब डेटा प्रकारों को भिन्न भिन्नात्मक सेकंड सटीकता का उपयोग करने के लिए सेट किया जाता है:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset(0)) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.0000000 +00:00 |
+------------------+------------------------------------+

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

यह फिर से है, लेकिन इस बार मैं डेटाटाइमऑफ़सेट के लिए भिन्नात्मक सेकंड की सटीकता को बढ़ाकर 3 कर देता हूं मूल्य:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset(3)) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1230000 +00:00 |
+------------------+------------------------------------+

तो यह पहले 3 भिन्नात्मक सेकंड (मिलीसेकंड) का उपयोग करता है।

हालांकि, अगर हम भिन्नात्मक सेकंड की सटीकता को 4 तक बढ़ाते हैं, तो देखें कि क्या होता है:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset(4)) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1235000 +00:00 |
+------------------+------------------------------------+

अगले उदाहरण में मैं भिन्नात्मक भाग का मान बढ़ाता हूं ताकि यह डेटाटाइमऑफ़सेट के गैर-आंशिक भाग का कारण बने पूर्णांकित किया जाने वाला मान:

DECLARE @thetime time(7);
SET @thetime = '23:15:59.7654321';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset(0)) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.7654321 | 1900-01-01 23:16:00.0000000 +00:00 |
+------------------+------------------------------------+

इस मामले में, मिनटों को गोल किया गया और सेकंड को शून्य पर सेट किया गया।

आइए इसकी अदला-बदली करें ताकि डेटाटाइमऑफ़सेट समय . की तुलना में उच्च सटीकता है मूल्य:

DECLARE @thetime time(4);
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetimeoffset(7)) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1235000 | 1900-01-01 23:15:59.1235000 +00:00 |
+------------------+------------------------------------+

मैंने @thetime . घोषित किया 4 के पैमाने का उपयोग करने के लिए चर, लेकिन फिर इसे डेटाटाइमऑफ़सेट में परिवर्तित करते समय 7 के पैमाने का उपयोग किया डेटा प्रकार। 7 की सटीकता का उपयोग करना अनावश्यक है, क्योंकि यह पहले से निर्दिष्ट की तुलना में उच्च परिशुद्धता का उपयोग नहीं कर सकता है।

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

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

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

DECLARE @thetime time;
SET @thetime = '23:15:59.1234567';
SELECT 
  @thetime AS 'time',
  CONVERT(datetimeoffset, @thetime) AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1234567 +00:00 |
+------------------+------------------------------------+

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

यहाँ एक ही काम करने का एक उदाहरण है, लेकिन एक अंतर्निहित प्रकार के रूपांतरण का उपयोग करना।

DECLARE @thetime time, @thedatetimeoffset datetimeoffset;
SET @thetime = '23:15:59.1234567';
SET @thedatetimeoffset = @thetime;
SELECT 
  @thetime AS 'time',
  @thedatetimeoffset AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 1900-01-01 23:15:59.1234567 +00:00 |
+------------------+------------------------------------+

इसलिए हमें एक ही परिणाम मिलता है, भले ही यह एक स्पष्ट या निहित रूपांतरण हो।

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

उदाहरण 5 - तारीख बदलें

यदि आपको तिथि बदलने की आवश्यकता है (लेकिन एक ही समय रखें), तो आप DATEADD() का उपयोग कर सकते हैं समारोह।

DECLARE @thetime time, @thedatetimeoffset datetimeoffset;
SET @thetime = '23:15:59.1234567';
SET @thedatetimeoffset = @thetime;
SET @thedatetimeoffset = DATEADD(year, 285, @thedatetimeoffset);
SELECT 
  @thetime AS 'time',
  @thedatetimeoffset AS 'datetimeoffset';

परिणाम:

+------------------+------------------------------------+
| time             | datetimeoffset                     |
|------------------+------------------------------------|
| 23:15:59.1234567 | 2185-01-01 23:15:59.1234567 +00:00 |
+------------------+------------------------------------+

इस मामले में मैं वर्ष के मूल्य में 285 जोड़ता हूं, जो इसे 2185 पर लाता है।


  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 सर्वर कर्सर प्रकार - डायनेमिक कर्सर | SQL सर्वर ट्यूटोरियल / TSQL ट्यूटोरियल

  2. टी-एसक्यूएल:मैक्स (अन्य कॉलम) के आधार पर कॉलम का चयन करना

  3. SQL सर्वर 2012 से sqlalchemy और pyodbc का उपयोग करके कनेक्ट करना

  4. एकाधिक तालिकाओं में शामिल होने से NULL मान लौटाता है

  5. तालिका के लिए पंक्ति का आकार निर्धारित करें