LAST_TRANSACTION_DATE
मान लिया जाये कि एक DATE
स्तंभ (या TIMESTAMP
) तो दोनों संस्करण बहुत बुरा व्यवहार कर रहे हैं।
दोनों मामलों में DATE
कॉलम वर्तमान एनएलएस सेटिंग्स के आधार पर निश्चित रूप से एक वर्ण शाब्दिक में परिवर्तित हो जाएगा।इसका मतलब है कि विभिन्न ग्राहकों के साथ आपको अलग-अलग परिणाम मिलेंगे।
तारीख शाब्दिक (!) एक प्रारूप मुखौटा के साथ हमेशा उपयोग to_date()
या एक एएनएसआई तारीख शाब्दिक का उपयोग का उपयोग करते समय। इस तरह आप तिथियों की तारीखों की तुलना तारों के साथ तारों की तुलना नहीं करते हैं। तो बराबर की तुलना के लिए आप का उपयोग करना चाहिए:
LAST_TRANSACTION_DATE = to_date('30-JUL-07', 'dd-mon-yy')
ध्यान दें कि 'सोम' का उपयोग अभी भी विभिन्न NLS सेटिंग्स ('DEC'
बनाम 'DEZ'
या 'MAR'
बनाम 'MRZ'
) के साथ त्रुटियों के लिए नेतृत्व कर सकते हैं।
LAST_TRANSACTION_DATE = to_date('30-07-2007', 'dd-mm-yyyy')
या एक एएनएसआई तारीख शाब्दिक
LAST_TRANSACTION_DATE = DATE '2007-07-30'
अब कारण है कि इसके बाद के संस्करण क्वेरी बहुत वापस जाने के लिए कुछ भी नहीं है की संभावना है का उपयोग करते हुए: यह बहुत त्रुटियों की संभावना कम महीने नंबर का उपयोग कर (और चार अंकों वर्ष) है कि ओरेकल DATE
कॉलम में समय भी शामिल है। उपर्युक्त दिनांक शाब्दिक रूप से समय 00:00
शामिल है। यदि तालिका में समय अलग है (उदा। 19:54
) तो निश्चित रूप से तिथियां बराबर नहीं हैं।
इस समस्या को वैकल्पिक हल के लिए आप अलग अलग विकल्प हैं: तालिका स्तंभ पर
- उपयोग
trunc()
00:00
trunc(LAST_TRANSACTION_DATE) = DATE '2007-07-30
इस के लिए समय "सामान्य" लेकिन LAST_TRANSACTION_DATE
पर परिभाषित एक सूचकांक के उपयोग नहीं कर पाएगा का उपयोग
between
LAST_TRANSACTION_DATE between to_date('2007-07-30 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('2007-07-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
पहले समाधान की प्रदर्शन समस्या को trunc(LAST_TRANSACTION_DATE)
पर एक इंडेक्स बनाकर काम किया जा सकता है जिसका उपयोग उस अभिव्यक्ति द्वारा किया जा सकता है। लेकिन अभिव्यक्ति LAST_TRANSACTION_DATE = '30-JUL-07'
रूप में अच्छी तरह क्योंकि आंतरिक रूप से यह के रूप में to_char(LAST_TRANSACTION_DATE) = '30-JUL-07'
संसाधित एक सूचकांक के उपयोग से बचाता है महत्वपूर्ण बातें याद करने के लिए:
- कभी नहीं, कभी अंतर्निहित डेटा प्रकार रूपांतरण पर निर्भर हैं। यह आपको किसी बिंदु पर समस्याएं देगा। हमेशा सही डेटा प्रकारों की तुलना करें
- ओरेकल
DATE
कॉलम में हमेशा एक ऐसा समय होता है जो तुलना नियमों का हिस्सा होता है।
स्रोत
2013-08-29 08:23:27
मुझे लगता है कि पहला व्यक्ति केवल 30-जुलाई -07 00: 00: 00' से मेल खाता है जबकि दूसरे मैच '30-Jul-07 **: **: **'? –