यह मानते हुए कि आप यूटीसी और उस समय क्षेत्र के बीच ऑफसेट जानते हैं जिसमें डेटा संग्रहीत है, यह बहुत आसान है:
DECLARE @offset INT;
SET @offset = <offset>;
UPDATE table SET col = DATEADD(HOUR, @offset, col);
ध्यान दें कि नकारात्मक या सकारात्मक हो सकता है, मुझे नहीं पता कि आप ग्रीनविच के किस पक्ष में हैं।
बेशक यह और अधिक जटिल हो जाता है यदि आप ऐसे समय क्षेत्र में हैं जो डेलाइट सेविंग टाइम देखता है; इस मामले में आपको अधिक विस्तृत समाधान की आवश्यकता हो सकती है जैसे कैलेंडर तालिका का उपयोग करना। यह विशेष रूप से जटिल है यदि आपका डेटा जॉर्ज बुश द्वारा अमेरिकी डीएसटी नियमों को बदलने से पहले विस्तारित हो जाता है, उदाहरण के लिए। मेरे पास काफी समय पहले का एक लेख जो उपयोगी हो सकता है ; एक और हालिया श्रृंखला यहाँ है:
- SQL सर्वर में समय क्षेत्रों के बीच रूपांतरण को संभालें - भाग 1
- SQL सर्वर में समय क्षेत्रों के बीच रूपांतरण को संभालें - भाग 2
- SQL सर्वर में समय क्षेत्रों के बीच रूपांतरण को संभालें - भाग 3
साथ ही अगर आपका कोई डेटा स्प्रिंग फॉरवर्ड/फॉल बैक डे पर 12:00 AM और 2:00 AM के बीच उस विंडो में आता है, जहां मुझे कभी भी यकीन नहीं होता कि इसे बदलना सही है क्योंकि यह चेंजओवर का दिन है या नहीं बदलना ऐसा इसलिए है क्योंकि यह दोपहर 2 बजे से पहले है।