Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्वेरी के बीच Oracle दिनांक

आपके आउटपुट को देखते हुए ऐसा लगता है कि आपने START_DATE को टाइमस्टैम्प के रूप में परिभाषित किया है। यदि यह एक नियमित तिथि होती तो Oracle निहित रूपांतरण को संभालने में सक्षम होता। लेकिन ऐसा नहीं है कि आपको तारीखों के लिए उन स्ट्रिंग्स को स्पष्ट रूप से डालने की आवश्यकता है।

SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
  2  /

Session altered.

SQL>
SQL> select * from t23
  2  where start_date between '15-JAN-10' and '17-JAN-10'
  3  /

no rows selected

SQL> select * from t23
  2  where start_date between to_date('15-JAN-10') and to_date('17-JAN-10')
  3  /

WIDGET                          START_DATE
------------------------------  ----------------------
Small Widget                    15-JAN-10 04.25.32.000    

SQL> 

लेकिन हमें अभी भी केवल एक पंक्ति मिलती है। ऐसा इसलिए है क्योंकि START_DATE में एक समय तत्व है। यदि हम समय घटक निर्दिष्ट नहीं करते हैं तो Oracle इसे मध्यरात्रि में डिफॉल्ट करता है। यह से . के लिए ठीक है BETWEEN . के किनारे लेकिन तक . के लिए नहीं पक्ष:

SQL> select * from t23
  2  where start_date between to_date('15-JAN-10') 
  3                       and to_date('17-JAN-10 23:59:59')
  4  /

WIDGET                          START_DATE
------------------------------  ----------------------
Small Widget                    15-JAN-10 04.25.32.000
Product 1                       17-JAN-10 04.31.32.000

SQL>

संपादित करें

यदि आप समय घटक में पास नहीं कर सकते हैं तो कुछ विकल्प हैं। पहला यह है कि मापदंड से समय तत्व को हटाने के लिए WHERE क्लॉज को बदला जाए:

where trunc(start_date) between to_date('15-JAN-10') 
                            and to_date('17-JAN-10')

इसका प्रदर्शन पर प्रभाव पड़ सकता है, क्योंकि यह START_DATE को किसी भी b-tree अनुक्रमणिका को अयोग्य घोषित कर देता है। आपको इसके बजाय फ़ंक्शन-आधारित अनुक्रमणिका बनाने की आवश्यकता होगी।

वैकल्पिक रूप से आप अपने कोड में दिनांक में समय तत्व जोड़ सकते हैं:

where start_date between to_date('15-JAN-10') 
                     and to_date('17-JAN-10') + (86399/86400) 

इन समस्याओं के कारण बहुत से लोग between . के उपयोग से बचना पसंद करते हैं इस तरह दिनांक सीमाओं की जाँच करके:

where start_date >= to_date('15-JAN-10') 
and start_date < to_date('18-JAN-10')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल के साथ एन-हाइबरनेट में लंबे तार त्रुटि का कारण बनते हैं

  2. Oracle 11g . में पिवट

  3. Oracle को PostgreSQL से कनेक्ट करना

  4. हाइबरनेट में Oracle XMLType कॉलम का उपयोग करना

  5. उन पंक्तियों को अनदेखा करने के लिए चयन विवरण में to_date अपवादों को कैसे संभालें?