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

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

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

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

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

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

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

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

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

DECLARE 
  @thedatetime datetime, 
  @thedatetimeoffset datetimeoffset(7);
SET @thedatetime = '2025-05-21 10:15:30.123';
SET @thedatetimeoffset = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetimeoffset AS 'datetimeoffset(7)';

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.123 | 2025-05-21 10:15:30.1233333 +00:00 |
+-------------------------+------------------------------------+

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

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

7 भिन्नात्मक सेकंड का सटीक उपयोग करने से डेटाटाइमऑफ़सेट . का कारण बनता है भंडारण के लिए 10 बाइट्स का उपयोग करने के लिए (11 बाइट्स यदि आप बाइट को शामिल करते हैं जो इसकी सटीकता को संग्रहीत करता है)। तुलना के अनुसार, डेटाटाइम केवल 8 बाइट्स का उपयोग करता है। हालांकि, आप डेटाटाइमऑफ़सेट . की सटीकता को कम कर सकते हैं 7 को कम संख्या से बदलकर मान। यह वही अवधारणा है जो datetime2 . का उपयोग करते समय होती है डेटा प्रकार। SQL सर्वर में 'डेटाटाइम' को 'डेटाटाइम 2' में कनवर्ट करें देखें कि यह अंतिम परिणाम को कैसे प्रभावित कर सकता है।

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

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

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

DECLARE 
  @thedatetime datetime, 
  @thedatetimeoffset datetimeoffset;
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetimeoffset = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetimeoffset AS 'datetimeoffset(7)';

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1266667 +00:00 |
+-------------------------+------------------------------------+

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

डेटाटाइमऑफ़सेट दूसरी ओर मान, भिन्नात्मक सेकंड को 1266667 . पर सेट करें .

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

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

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

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

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1266667 +00:00 |
+-------------------------+------------------------------------+

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

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

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

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1266667 +00:00 |
+-------------------------+------------------------------------+

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

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

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

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

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

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

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1270000 +07:00 |
+-------------------------+------------------------------------+

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

DECLARE @thedatetime datetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  TODATETIMEOFFSET(@thedatetime, '+07:00') AS 'datetimeoffset';

परिणाम:

+-------------------------+------------------------------------+
| datetime                | datetimeoffset(7)                  |
|-------------------------+------------------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1270000 +07:00 |
+-------------------------+------------------------------------+

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

उदाहरण:

DECLARE @thedatetime datetime, @thedatetimeoffset datetimeoffset(7);
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetimeoffset = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetimeoffset AS 'datetimeoffset',
  TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';

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

datetime       | 2025-05-21 10:15:30.127
datetimeoffset | 2025-05-21 10:15:30.1266667 +00:00
Modified       | 2025-05-21 10:15:30.1266667 +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. एक चर के रूप में एक तालिका का नाम

  2. M1 Mac (ARM64) पर SQL सर्वर कैसे स्थापित करें

  3. दो दशमलव स्थानों के साथ एक संख्या लिखें SQL सर्वर

  4. java.sql.SQLException:jdbc के लिए कोई उपयुक्त ड्राइवर नहीं मिला:Microsoft:sqlserver

  5. SQL सर्वर (T-SQL उदाहरण) में 'time' को 'smalldatetime' में बदलें