मान लें कि date_enter
एक DATE
है फ़ील्ड:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate)
And CuRo.Date_Enter < trunc(sysdate) + 1;
trunc()
फ़ंक्शन डिफ़ॉल्ट रूप से समय भाग निकाल देता है, इसलिए trunc(sysdate)
आज सुबह आपको आधी रात देता है।
यदि आप विशेष रूप से between
के साथ रहना चाहते हैं , और आपके पास एक DATE
है TIMESTAMP
नहीं है , आप यह कर सकते हैं:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter between trunc(sysdate)
And trunc(sysdate) + interval '1' day - interval '1' second;
between
समावेशी है, इसलिए यदि आप एक सेकंड की छुट्टी नहीं लेते हैं तो आप संभावित रूप से आज रात ठीक मध्यरात्रि से रिकॉर्ड प्राप्त कर सकते हैं; इसलिए यह 23:59:59 समय उत्पन्न करता है जिसे आप अपनी मूल क्वेरी में ढूंढ रहे थे। लेकिन >=
. का उपयोग करके और <
वैसे भी, मेरी राय में, थोड़ा स्पष्ट और अधिक स्पष्ट है।
यदि आप सुनिश्चित हैं कि आपके पास आज के बाद की तारीखें नहीं हो सकती हैं, तो ऊपरी सीमा वास्तव में कुछ भी नहीं जोड़ रही है, और आपको वही परिणाम मिलेगा:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate);
आप trunc
. का उपयोग नहीं करना चाहते या to_char
date_enter
. पर हालांकि स्तंभ; किसी भी फ़ंक्शन का उपयोग करने से उस कॉलम पर एक इंडेक्स का उपयोग होने से रोकता है, यही वजह है कि to_char
. के साथ आपकी क्वेरी बहुत धीमा था।