Oracle में दिनांक सीमाओं को खोजने के एक से अधिक तरीके हैं। आपके परिदृश्य के लिए मेरा सुझाव है कि आप सभी तिथियों के महीने और दिन के तत्वों को संख्याओं में बदल दें।
select
p.id as person_id,
...
...
where e.active = 1
and to_number (to_char( e.dateOfBirth, 'MMDD'))
between to_number (to_char( FROMDATE, 'MMDD'))
and to_number (to_char( TODATE, 'MMDD'))
order by extract(month from e.dateOfBirth) DESC,
extract(day from e.dateOfBirth) DESC
यह e.dateOfBirth
. पर किसी अनुक्रमणिका का उपयोग नहीं करेगा कॉलम। क्या यह मायने रखता है इस पर निर्भर करता है कि आप कितनी बार क्वेरी चलाना चाहते हैं।
@AdeelAnsari टिप्पणियाँ:
क्या सूचकांक? dateOfBirth
पर एक सामान्य अनुक्रमणिका किसी भी काम का नहीं होगा, क्योंकि सूचकांक प्रविष्टियां वर्ष तत्व के साथ आगे बढ़ेंगी। तो यह आपको किसी भी . पर पैदा हुए लोगों के सभी रिकॉर्ड खोजने में मदद नहीं करेगा 23 दिसंबर।
एक फ़ंक्शन-आधारित अनुक्रमणिका - या 11g में, एक अनुक्रमणिका के साथ एक आभासी स्तंभ (मूल रूप से एक ही चीज़) - किसी दिनांक स्तंभ के भागों को अनुक्रमणित करने का एकमात्र तरीका है।