2011-05-25 14 views
22

में संग्रहीत होने के बाद अलग होता है जब मैं दिनांक दिनांक के साथ डेट प्रॉपर्टी संग्रहीत करता हूं। डेटाबेस में मैक्सवेल्यू और इसे वापस पुनर्प्राप्त करें, संग्रहीत मान डेटटाइम के बराबर नहीं है। मैक्सवेल्यू। टिक गुण बंद हैं। ऐसा क्यों है?.net डेटटाइम मैक्सवैल्यू डेटाबेस

का उपयोग एमएस एसक्यूएल, दिनांक फ़ील्ड के लिए डेटा प्रकार 'दिनांक'

enter image description here

+0

आप किस डेटाबेस का उपयोग कर रहे हैं और डेटाबेस में कौन सा डेटा प्रकार दिनांक संग्रहीत कर रहा है? – David

+0

बहुत ही रोचक सवाल @ dev.e.loper –

+0

क्या आपने डेटाटाइम 2 का प्रयास किया था? अच्छे प्रश्न के लिए http://technet.microsoft.com/en-us/library/bb677335.aspx –

उत्तर

20

क्योंकि SQL डेटाटाइम में कम रिज़ॉल्यूशन है।

एक तीन सौवां द्वितीय, या 3.33 मिलीसेकेंड की सटीकता के साथ एमएस एसक्यूएल में datetime डेटा प्रकार से 1 जनवरी 1753, 31 दिसंबर, 9999, को का दिनांक और समय डेटा प्रतिनिधित्व करता है। मान की वृद्धि हुई है .000, .003, या .007 मिलीसेकंड की वृद्धि।

source

नेट में datetime मान प्रकार 11:59 के माध्यम से 12:00:00 आधी रात, 1 जनवरी 0001 ईसवी (आम युग) से दिनांक और समय का प्रतिनिधित्व करता है : 5 9 अपराह्न, 31 दिसंबर, 99 99 ईस्वी (सीई) समय मूल्य 100-नैनोसेकंद इकाइयों को टिक कहा जाता है।

source

+0

FWIW - मुझे बताया गया था कि यह SQL Server 2010 (या जो कुछ भी इसे जारी करेगा) में तय किया जाएगा ताकि डेटटाइम डेटा प्रकार मिलान हो। – dolphy

+1

@ डॉल्फी, कुछ हद तक, उन्होंने पहले ही एसक्यूएल 2008 में इसे "निश्चित" किया है - इसमें नई तिथि और समय डेटाटाइप है जो अधिक (या कम) परिशुद्धता की अनुमति देगा। मुझे बहुत संदेह है कि एमएस कभी भी बदल जाएगा कि कैसे "पुराना" डेटाटाइम डेटा प्रकार काम करता है, क्योंकि इससे बहुत सारे मौजूदा कोड का एक टुकड़ा टूट जाएगा और उनके मौजूदा ग्राहक आधार को बंद कर दिया जाएगा। –

+0

@ फिलिप केली - यही वही है जिसका मैं जिक्र कर रहा था। मुझे एहसास नहीं हुआ कि एसक्यूएल 2008 में ऐसा किया गया था। मुझे लगता है कि यह दिखाता है कि मेरी कंपनी अभी भी SQL 2005 पर है :-) – dolphy

1

मैं मानता हूं कि मैं इस पर कुछ नहीं कर रहा हूँ, लेकिन यह datetime की सटीकता के साथ क्या करना हो सकता है?

यहाँ एक त्वरित खोज करना Precision and accuracy of DateTime

पर एक लेख भी शायद वहाँ सी # एसक्यूएल बनाम में datetime की शुद्धता के बीच एक mistmatch है?

0

डेटा फ़ील्ड किस प्रकार का है जिसमें आप इस मूल्य को संग्रहीत कर रहे हैं?

यह हो सकता है कि .NET DateTime के लिए अधिकतम मान डेटाबेस इंजन में समतुल्य डेटा प्रकार की क्षमता से अधिक हो।

2

यह बहुत अच्छी तरह से हो सकता है क्योंकि .NET डेटटाइम सीधे SQL डेटटाइम प्रकार में अनुवाद नहीं करता है।

मैं दोनों मान निर्धारित करता हूं और फिर SqlDateTime.MaxValue के खिलाफ टिकों की जांच करता हूं।

0

एमएस एसक्यूएल सर्वर निम्नतम स्तर पर तारीखों के साथ कुछ अजीब काम करता है। उदाहरण के लिए निम्न स्क्रिप्ट पर विचार करें:

select 
    test1 = dateadd(ms,-1,convert(datetime,'20110504')), 
    test2 = dateadd(ms,-2,convert(datetime,'20110504')), 
    test3 = dateadd(ms,-3,convert(datetime,'20110504')), 
    test4 = dateadd(ms,-4,convert(datetime,'20110504')), 
    test5 = dateadd(ms,-5,convert(datetime,'20110504')), 
    test6 = dateadd(ms,-6,convert(datetime,'20110504')) 

यह रिटर्न:

test1     test2     test3     test4     test5     test6 
----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- 
2011-05-04 00:00:00.000 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.993 2011-05-03 23:59:59.993 

आप देख सकते हैं एमएस एसक्यूएल केवल निकटतम 3. करने के लिए मिलीसेकेंड के साथ काम कर रहा है आप इन वे गोल करने के बीच जाएँ। यह संभव है कि यह तब हो रहा है जब डेटटाइम। मैक्सवेल्यू एसक्यूएल में संग्रहीत हो रहा है।

संबंधित मुद्दे