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

SQL सर्वर (T-SQL) में डेटाटाइमऑफ़सेट मान पर समय क्षेत्र ऑफ़सेट बदलें

आप SWITCHOFFSET() का उपयोग कर सकते हैं समय क्षेत्र ऑफ़सेट को डेटाटाइमऑफ़सेट . पर बदलने के लिए SQL सर्वर में कार्य करता है मूल्य।

फ़ंक्शन दो तर्क स्वीकार करता है; एक डेटाटाइमऑफ़सेट(n) value (या एक एक्सप्रेशन जिसे datetimeoffset(n) . में हल किया जा सकता है) value), और नया समय क्षेत्र।

उदाहरण

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।

DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
  @dto AS [Original],
  SWITCHOFFSET(@dto, '+04:00') AS [Modified];

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

Original | 2020-12-20 17:33:59.8900000 +02:00
Modified | 2020-12-20 19:33:59.8900000 +04:00

ध्यान दें कि समय क्षेत्र ऑफ़सेट को एक स्ट्रिंग के रूप में निर्दिष्ट किया गया है। ऐसा इसलिए है क्योंकि मैंने इसे घंटों में उपलब्ध कराया था।

जब घंटों में निर्दिष्ट किया जाता है, तो समय क्षेत्र ऑफ़सेट को [+|-]TZH:TZM प्रारूप का उपयोग करना चाहिए और एक स्ट्रिंग के रूप में निर्दिष्ट होना चाहिए (सिंगल कोट्स में संलग्न)।

मिनटों को टाइम ज़ोन ऑफ़सेट के रूप में उपयोग करें

आप वैकल्पिक रूप से समय क्षेत्र ऑफ़सेट मिनटों में निर्दिष्ट कर सकते हैं। ऐसा करते समय, आपको इसे एक पूर्णांक के रूप में निर्दिष्ट करना होगा।

DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
  @dto AS [Original],
  SWITCHOFFSET(@dto, 240) AS [Modified];

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

Original | 2020-12-20 17:33:59.8900000 +02:00
Modified | 2020-12-20 19:33:59.8900000 +04:00

डेटाबेस उदाहरण

यहां SWITCHOFFSET() का उपयोग करने का एक उदाहरण दिया गया है डेटाबेस तालिका में कॉलम से मान पर।

CREATE TABLE Test 
  (
      Col1 datetimeoffset
  ); 
INSERT INTO Test   
VALUES ('1967-12-20 17:33:59.8900000 -07:00'); 
SELECT 
  Col1,
  SWITCHOFFSET(Col1, '-08:00') AS Modified
FROM Test;

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

Col1     | 1967-12-20 17:33:59.8900000 -07:00
Modified | 1967-12-20 16:33:59.8900000 -08:00

GETDATE() मान का उपयोग करते समय प्रदर्शन

Microsoft सलाह देता है कि SWITCHOFFSET() . का उपयोग करके GETDATE() . के साथ क्वेरी ऑप्टिमाइज़र डेटाटाइम के लिए सटीक कार्डिनैलिटी अनुमान प्राप्त करने में असमर्थ होने के कारण फ़ंक्शन क्वेरी को धीरे-धीरे चलाने का कारण बन सकता है मूल्य।

इस समस्या को हल करने के लिए, OPTION (RECOMPILE) का उपयोग करें प्रश्न संकेत। यह क्वेरी ऑप्टिमाइज़र को अगली बार उसी क्वेरी के निष्पादित होने पर एक क्वेरी योजना को फिर से संकलित करने के लिए बाध्य करता है।

समय क्षेत्र ऑफ़सेट के बारे में नहीं जानते?

यदि आप उपयोग करने के लिए समय क्षेत्र ऑफ़सेट नहीं जानते हैं, तो यहां SQL सर्वर में समर्थित समय क्षेत्रों की सूची प्राप्त करने का तरीका बताया गया है।

एक बात जिस पर आपको ध्यान देने की आवश्यकता है वह है दिन के उजाले की बचत। कई देशों/क्षेत्रों में दिन के उजाले की बचत के लिए अपने स्वयं के विशिष्ट नियम हैं (और कुछ इसे बिल्कुल भी नहीं मानते हैं)। यह सभी प्रकार की समस्याओं का कारण बन सकता है जब आप यह पता लगाने की कोशिश कर रहे हैं कि आपके समय क्षेत्र ऑफ़सेट में दिन के उजाले की बचत को शामिल किया जाए या नहीं।

सौभाग्य से, SQL सर्वर इससे निपटने का एक तरीका लेकर आया। SQL सर्वर 2016 ने AT TIME ZONE पेश किया खंड। यह खंड आपको समय क्षेत्र का नाम निर्दिष्ट करने की अनुमति देता है, न कि समय क्षेत्र ऑफ़सेट के बजाय। इसलिए, आप बस 'यूएस माउंटेन स्टैंडर्ड टाइम' या 'इंडिया स्टैंडर्ड टाइम' या जो भी समय क्षेत्र लागू हो, का उपयोग कर सकते हैं।

यह कैसे करना है, इसके उदाहरण के लिए किसी दिनांक को किसी अन्य समय क्षेत्र में कनवर्ट करें देखें।


  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. डेटाबेस और रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) क्या है

  3. Oracle को SKIP LOCKED के साथ TOP N पंक्तियों को वापस करने के लिए बाध्य करें

  4. सिस्टम सांख्यिकीय कार्यों का उपयोग करके SQL सर्वर सांख्यिकी जानकारी कैसे प्राप्त करें

  5. SQL सर्वर में INSERT पास-थ्रू क्वेरी कैसे करें