क्यों टाइम ज़ोन नॉनडेटर्मिनिस्टिक है?


18

एसक्यूएल सर्वर २०१६ AT TIME ZONEनॉनडेटर्मिनिस्टिक प्रतीत होता है। हालाँकि, मैं आधिकारिक तौर पर यह बताते हुए या इसके पीछे तर्क के रूप में कोई तर्क नहीं दे पाया।

क्यों है AT TIME ZONEनवजातवादी?

गैर-नियतत्ववाद को दर्शाने वाला उदाहरण

निष्पादित:

CREATE TABLE Test (
    LegacyTimestamp DATETIME,
    Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
); 

निम्न त्रुटि देता है:

Msg 4936, Level 16, State 1, Line 1
Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.

4
तीन शब्द। दिन का प्रकाश समय बचा रहा।
पापाराज़ो

2
समय के रूप में ज्ञात दुःस्वप्न में आपका स्वागत है। मैं लगभग इच्छा करता हूं कि जब आप समय स्टोर करते हैं तो यह अनिवार्य था, आपने समय क्षेत्र भी संग्रहीत किया है। मैं सिर दर्द की दवा में इतना बचा लेता।
एरिक एस

बस एक Microsoft कनेक्ट आइटम बनाया है जो प्रलेखन के लिए अद्यतन करने के लिए 'एटी टाइम ज़ोन के गैर-नियतत्ववाद को प्रतिबिंबित करने के लिए अद्यतन किया जाए।
बेन ग्रिबोडो

जवाबों:


20

AT TIME ZONE डेलाइट सेविंग टाइम की गणना करने के लिए कुछ तर्क देता है । डीएसटी ऑफ़सेट मान अपरिवर्तनीय नहीं हैं (वे विंडोज़ अपडेट के माध्यम से परिवर्तन के अधीन हैं ) और बाहरी रूप से विंडोज रजिस्ट्री में निहित हैं, इसलिए AT TIME ZONEजब तक यह बाहरी डेटा पर निर्भर नहीं होता है , तब तक फ़ंक्शन निर्धारक नहीं हो सकता है।

इसी तरह, यह क्यों sys.time_zone_infoएक दृश्य है और एक स्थिर संदर्भ तालिका नहीं है, इसकी गणना उन रजिस्ट्री मूल्यों के आधार पर की जानी चाहिए जिनके पास समय-समय की जानकारी सबसे अधिक है।


1
लेकिन इसकी गणना तारीख में परिवर्तित होने के संदर्भ में नहीं की जानी चाहिए? यदि यह गैर-नियतात्मक है, तो इसका कारण यह है कि दिन की बचत किस दिन शुरू होती है, यह भविष्य में बदल सकता है, जैसा कि 2009 में हुआ था।
रैंडम 832

@ Random832 सही! मैंने इसके लिए कुछ विवरणों को छोड़ दिया है, मैंने और अधिक स्पष्ट होने के लिए अपडेट किया है।
लोवलीबा

2
@ Random832, न केवल पिछली तारीखों बल्कि भविष्य की तारीखों पर विचार करें। यदि भविष्य की तारीख समय परिवर्तन नियमों के आधार पर संग्रहीत की जाती है जो आज मौजूद है तो मूल्य अमान्य हो जाएगा यदि नियम अब और फिर के बीच बदलते हैं,
दान गुज़मैन

1
जॉन: यह अच्छी जानकारी है, लेकिन यह कहने के लिए इसे फिर से व्यवस्थित करने के लिए अधिक तकनीकी रूप से सटीक नहीं होगा कि यह वास्तविक कारण है कि यह गैर-नियतात्मक है केवल रजिस्ट्री से जानकारी प्राप्त करने पर बाहरी निर्भरता के कारण है? निश्चित रूप से, इसे ऐप कोड में हार्ड-कोड होने के विपरीत वहां से जानकारी क्यों प्राप्त करनी है (यानी मूल कारण) ज्यादातर डीएसटी नियमों में कितनी बार बदलाव होता है, और इस तथ्य के कारण कि नए समय क्षेत्र पेश किए जा सकते हैं, लेकिन यह वास्तव में माध्यमिक है, है ना? लेकिन "क्यों" की परवाह किए बिना, किसी भी बाहरी निर्भरता को किसी भी कार्य को गैर-नियतात्मक बनाना चाहिए।
सोलोमन रटज़की 14

1
बहुत बढ़िया! FYI करें, मुझे यहाँ कुछ दिलचस्प जानकारी मिली - en.wikipedia.org/wiki/Tz_database - जो कुछ दस्तावेज़ों में से एक प्रतीत होता है (कम से कम मुझे अब तक मिल सकता है) जो दर्शाता है कि DST केवल एक चीज नहीं है बदलने के लिए। मैं C: \ Windows \ Globalization \ Time Zone \ timezones.xml फ़ाइल को देखने से जो बता सकता हूं , यहां तक ​​कि आधार ऑफ़सेट समय के साथ बदल सकते हैं, हालांकि 1970 से कम बार, मुझे लगता है। +1 :-) (इसे फिर से जोड़ना पड़ा क्योंकि इस लिंक में एक बुरा चरित्र था)
सोलोमन रटज़स्की

1

मैंने नियतात्मक और नोंडेटरमिनिस्टिक विषय पर nondeterministic सूची में AT TIME ZONE जोड़ दिया है, और AT TIME ZONE विषय में, मैंने कहा: चूंकि SQL सर्वर के बाहर कुछ जानकारी (जैसे कि समयक्षेत्र नियम) बनाए रखा जाता है और कभी-कभी परिवर्तन के अधीन होता है। AT TIME ZONE फ़ंक्शन को nondeterministic के रूप में वर्गीकृत किया गया है। इस परवरिश के लिए धन्यवाद। रिक Byham, SQL सर्वर पुस्तकें ऑनलाइन।


2
यह एक उत्तर के बजाय एक टिप्पणी होनी चाहिए!
परिजन शाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.