में गलत परिणाम देता है मैं SQL सर्वर 2005 में डेटाटाइम फ़ील्ड का उपयोग करके एक अजीब बग में चल रहा हूं। डेटाटाइम फ़ील्ड मिलीसेकंड-स्तर सटीकता के साथ दिखाई देता है, लेकिन ऐसा लगता है कि मिलीसेकंड नहीं हैं हमेशा इस्तेमाल किया।मिलीसेकंड के साथ डेटाटाइम फ़ील्ड पर क्वेरी SQL सर्वर
SELECT col1, YEAR(col1) AS yr, MONTH(col1) AS mn, DAY(col1) AS dy
FROM mytable
WHERE col1 >= '2009-12-31 00:00:00.0' AND col1 <= '2009-12-31 23:59:59.999'
ORDER BY col1
मेरे परिणाम में मैं मिलता है:: यहाँ अपने परीक्षण क्वेरी है
col1 | yr | mn | dy ----------------------------+------+----+---- 2009-12-31 00:00:00:00.000 | 2009 | 12 | 31 2010-01-01 00:00:00:00.000 | 2010 | 1 | 1
समस्या यह है कि मैं 2010-01-01 तारीख मिल गया है, भले ही उस से कम या बराबर नहीं होना चाहिए "200 9-12-31 23: 5 9: 5 9.9 99"। लेकिन अगर मैं "2009-12-31 23: 59: 59.99 " का उपयोग करने के लिए क्वेरी बदलता हूं, तो यह ठीक काम करता है (2010 की तारीखें वापस नहीं आती हैं)।
क्या यह एक बग है, या यह है कि SQL सर्वर कैसे काम करता है? यदि यह इस तरह काम करता है, तो इसके लिए कोई कारण है? मैं माइस्क्लुएल से कुछ प्रश्नों को माइग्रेट करने में भाग गया, जहां यह अपेक्षित काम करता है (भले ही MySQL मिलीसेकंड भी स्टोर नहीं करता है!)।
की एक विशेष संस्करण यह आपके कोड, उपयोग में एक विकल्प है, तो क्या करना चाहिए है इससे कम: "... और col1 <'2010-1-1 00: 00: 00.0' –
बस संदर्भ जोड़ने के लिए: http://msdn.microsoft.com/en-us/library/ms187819.aspx 'शुद्धता: .000, .003, या .007 सेकेंड ' –
3.33-मिलीसेकंद टिकों की वृद्धि के लिए बढ़ा। मुझे आश्चर्य है कि पृथ्वी पर उन्होंने क्यों चुना? अगर वे इसे 32-बिट दिनांक और 32-बिट समय के रूप में संग्रहीत कर रहे हैं, एक दिन में मिलीसेकंड की कुल संख्या केवल 0x05265c00 है, जो कमरे के साथ 32-बिट पूर्णांक में फिट बैठती है। – Jenni