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

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

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

जब आप किसी डेटाटाइम . को रूपांतरित करते हैं datetime2 . के लिए मान , परिणामी मान उस भिन्नात्मक सेकंड की सटीकता पर निर्भर करेगा जिसे आप datetime2 . को असाइन करते हैं .

डेटाटाइम डेटा प्रकार में इसके भिन्नात्मक सेकंड भाग के लिए अधिकतम 3 अंक होते हैं। इसकी सटीकता .000, .003, या .007 सेकंड की वृद्धि के लिए गोल है।

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

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

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

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2;
SET @thedatetime = '2025-05-21 10:15:30.123';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

परिणाम:

+-------------------------+-----------------------------+
| datetime                | datetime2                   |
|-------------------------+-----------------------------|
| 2025-05-21 10:15:30.123 | 2025-05-21 10:15:30.1233333 |
+-------------------------+-----------------------------+

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

हम देख सकते हैं कि datetime2 वेरिएबल में अधिक भिन्नात्मक सेकंड की सटीकता होती है, और हम 1233333 के भिन्नात्मक भाग के साथ समाप्त होते हैं (बनाम 123 डेटाटाइम . के लिए मूल्य)।

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

डेटाटाइम डेटा प्रकार .000, .003, या .007 सेकंड की वृद्धि के लिए गोल है। यहां तक ​​​​कि अगर आप इसे स्पष्ट रूप से किसी अन्य मान पर सेट करते हैं, तो इसे गोल किया जाएगा। जैसा कि आप उम्मीद कर सकते हैं, यह बहुत भ्रम पैदा कर सकता है यदि आप इसके बारे में नहीं जानते हैं कि यह कैसे काम करता है। डेटाटाइम . का उपयोग करते समय यह न केवल भ्रम पैदा कर सकता है अपने आप में, यह उस मान को किसी अन्य डेटा प्रकार में परिवर्तित करते समय अतिरिक्त भ्रम पैदा कर सकता है।

यहां एक उदाहरण दिया गया है जो दर्शाता है कि मेरा क्या मतलब है।

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2;
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

परिणाम:

+-------------------------+-----------------------------+
| datetime                | datetime2                   |
|-------------------------+-----------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1266667 |
+-------------------------+-----------------------------+

इस उदाहरण में, मैंने भिन्नात्मक सेकंड को 125 . पर सेट किया है लेकिन डेटाटाइम इसे 127 . तक गोल करें (क्योंकि इसे केवल .000, .003, या .007 सेकंड की वृद्धि के लिए पूर्णांकित किया जा सकता है)।

डेटाटाइम2 मान हालांकि, भिन्नात्मक सेकंड को 1266667 . पर सेट करें .

वैसे, यदि हम केवल प्रारंभिक मान को datetime2 . पर सेट करते हैं सबसे पहले, इसका भिन्नात्मक भाग 1250000 वापस आ जाता ।

उदाहरण 3 - सटीक/सटीकता

datetime2 . के लाभों में से एक यह है कि यह आपको भिन्नात्मक सेकंड सटीक निर्दिष्ट करने की अनुमति देता है। यदि आप ऐसा नहीं करते हैं, तो यह 7 का उपयोग करता है (इसलिए, पिछला उदाहरण 7 का उपयोग करता है)।

इसलिए हम पिछले उदाहरण को संशोधित कर सकते हैं ताकि datetime2 मान डेटाटाइम . के समान ही भिन्नात्मक सेकंड की सटीकता का उपयोग करता है डेटा प्रकार।

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2(3);
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

परिणाम:

+-------------------------+-------------------------+
| datetime                | datetime2               |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

जब हम ऐसा करते हैं, तो datetime2 मान डेटाटाइम . जैसा ही परिणाम देता है मूल्य। यह समान मात्रा में भंडारण (8 बाइट्स) का भी उपयोग करता है। इस मामले में, डेटाटाइम2 मूल्य को स्टोर करने के लिए 7 बाइट्स का उपयोग करता है, और मूल्य की शुद्धता को स्टोर करने के लिए 1 बाइट का उपयोग करता है।

आप कम भी निर्दिष्ट कर सकते हैं डेटाटाइम . से भिन्नात्मक सेकंड सटीक यदि आपको अतिरिक्त सटीकता की कोई आवश्यकता नहीं है। ऐसा करने से आप संग्रहण स्थान पर एक संपूर्ण बाइट बचा लेंगे (आपका datetime2 मान डेटाटाइम . के लिए 8 बाइट्स की तुलना में 7 बाइट्स का उपयोग करेगा मूल्य)।

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2(2);
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

परिणाम:

+-------------------------+------------------------+
| datetime                | datetime2              |
|-------------------------+------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.13 |
+-------------------------+------------------------+

ध्यान रखें कि इसके परिणामस्वरूप भिन्नात्मक सेकंड भी गोल हो सकते हैं।

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

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

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CAST(@thedatetime AS datetime2(3)) AS 'datetime2(3)';

परिणाम:

+-------------------------+-------------------------+
| datetime                | datetime2(3)            |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

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

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

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CONVERT(datetime2(3), thedatetime) AS 'datetime2(3)';

परिणाम:

+-------------------------+-------------------------+
| datetime                | datetime2(3)            |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

Microsoft की अनुशंसा

जब भी इन दो डेटा प्रकारों के बीच मिश्रित तुलना परिदृश्य मौजूद हो, Microsoft स्पष्ट कास्टिंग का उपयोग करने की अनुशंसा करता है:

<ब्लॉकक्वॉट>

डेटाबेस संगतता स्तर 130 के तहत, डेटाटाइम . से निहित रूपांतरण से डेटाटाइम2 . तक डेटा प्रकार भिन्न मिलीसेकंड के हिसाब से बेहतर सटीकता दिखाते हैं, जिसके परिणामस्वरूप विभिन्न परिवर्तित मान प्राप्त होते हैं... datetime2 के लिए स्पष्ट कास्टिंग का उपयोग करें डेटाटाइप जब भी डेटाटाइम . के बीच मिश्रित तुलना परिदृश्य हो और डेटाटाइम2 डेटाटाइप मौजूद हैं।


  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. दिनांक और नल के अनुसार SQL सर्वर ऑर्डर अंतिम

  4. TIMEFROMPARTS () SQL सर्वर में उदाहरण (T-SQL)

  5. एमएस एसक्यूएल का उपयोग करके अपडेट और ऑर्डर कैसे करें