2012-09-03 15 views
5

मैं, इस प्रकार एक साधारण क्वेरी जो मुझे टाइमस्टैम्प के आधार पर डेटा हो जाता है चलाने के लिए कोशिश कर रहा हूँ:डीबी 2 टाइमस्टैम्प का चयन बयान

SELECT * 
FROM <table_name> 
WHERE id = 1 
AND usagetime = timestamp('2012-09-03 08:03:06') 
WITH UR; 

यह मेरे लिए एक रिकार्ड वापस जाने के लिए नहीं लगता है, जबकि इस रिकॉर्ड में मौजूद है आईडी = 1.

के लिए डेटाबेस मैं क्या गलत कर रहा हूं?

कॉलम usagetime के डेटाटाइप सही है, टाइमस्टैम्प पर सेट करें।

+2

मुहर एक दूसरे के भिन्न है, साथ ही: एक लेकर विधेय है कि उस समय के लिए किसी भी माइक्रोसेकंड मूल्य पर से मेल खाएगी निर्दिष्ट कर सकते हैं। मुझे लगता है कि यह आपकी समस्या है, मैं आपके चयन कथन में उनको नहीं देख रहा हूं। – bhamby

उत्तर

17

@bhamby सही है। अपने टाइमस्टैम्प मूल्य से माइक्रोसेकंड को छोड़कर, आपकी क्वेरी केवल 2012-09-03 08: 03: 06.000000

पर मेल खाती है यदि आपके पास पिछली क्वेरी से प्राप्त पूर्ण टाइमस्टैम्प मान नहीं है, तो आप

...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07' 

या

...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06' 
    AND usagetime < '2012-09-03 08:03:07' 
+1

मैं यह भी इंगित करना चाहता था कि टाइमस्टैम्प() को कॉल टाइमस्टैम्प मान (जिसे आपने अपने प्रश्न में ठीक से किया है) के एक स्वीकार्य स्ट्रिंग प्रस्तुति को निर्दिष्ट करते समय अनावश्यक है। –

+1

कृपया 'बीटवेन' का उपयोग न करें, खासकर दिनांक/समय/टाइमस्टैम्प से निपटने पर। एक बात के लिए, आपके दो 'कहां' खंड ** ** ** समकक्ष नहीं हैं। –

+1

आप सही हैं। 'BETWEEN' स्थिति में निम्नलिखित दूसरे शामिल होंगे, लेकिन दो तुलना निम्नलिखित दूसरे को छोड़ देंगी। 'BETWEEN' का उपयोग करने का एक और नकारात्मक पक्ष यह है कि - कम से कम डीबी 2 के पुराने संस्करणों में - क्वेरी ऑप्टिमाइज़र को दो स्पष्ट श्रेणियों की तुलना में कम कुशल पहुंच योजना चुनने के लिए जाना जाता है। –

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