आप सर्वोत्तम प्रथाओं के लिए पूछ रहे हैं। मुझे लगता है कि निम्नलिखित सर्वोत्तम अभ्यास है:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
सबसे पहले, DATE
. के उपयोग पर ध्यान दें खोजशब्द। आपका सवाल तारीखों के बारे में है और फिर भी आप एक तिथि प्रारूप का उपयोग कर रहे हैं जिसका Oracle सीधे समर्थन नहीं करता है। खुशी की बात है कि Oracle ANSI मानक का समर्थन करता है DATE
आईएसओ मानक प्रारूप वाला कीवर्ड।
दूसरा, मैंने एक +1
जोड़ा तो आप समय अवधि का अंत देख सकते हैं, जो संभवत:आप कोड में देखना चाहते हैं। यह प्रदर्शन को प्रभावित नहीं करना चाहिए क्योंकि + 1
स्थिर है।
तीसरा, दिनांक स्थिरांक में समय घटक होता है। जब कोई निर्दिष्ट नहीं किया जाता है, तो यह तिथि की मध्यरात्रि है। तो, अभिव्यक्ति:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
वास्तव में है:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
यानी बाद की तारीख से ठीक एक बार, आधी रात को पहला पल शामिल है। यह आमतौर पर वह नहीं है जो आप चाहते हैं। Oracle इस समस्या को दो तरह से बदतर बनाता है:
date
डेटा प्रकार में एक समय घटक शामिल होता है।- प्रस्तुत करने का डिफ़ॉल्ट तरीका
date
मानों का कोई समय घटक नहीं होता है।
इसलिए, सबसे सुरक्षित रहने के लिए, निम्नलिखित नियमों का उपयोग करें:
between
का प्रयोग न करें तारीखों पर।>=
का प्रयोग करें पहली तारीख के लिए।- उपयोगकर्ता
<
दूसरे के लिए।
एरोन बर्ट्रेंड के पास एक ब्लॉग है
बिल्कुल इस विषय पर। हालांकि यह विशेष रूप से SQL सर्वर के बारे में है, कई विचार Oracle पर लागू होते हैं - विशेष रूप से क्योंकि date
Oracle में डेटा प्रकार में समय शामिल होता है।