टोनी की टिप्पणी को प्रतिध्वनित करते हुए, आप इन अपवादों को खोजने और संभालने के लिए फ़्रंट-एंड क्वेरी टूल को मजबूर करने के बजाय DATE कॉलम में तारीखों को संग्रहीत करना बेहतर समझते हैं।
यदि आप गलत डेटा मॉडल के साथ फंस गए हैं, हालांकि, पुराने संस्करणों में सबसे आसान विकल्प एक ऐसा फ़ंक्शन बनाना है जो रूपांतरण करता है और त्रुटि को संभालता है,
CREATE OR REPLACE FUNCTION my_to_date( p_date_str IN VARCHAR2,
p_format_mask IN VARCHAR2 )
RETURN DATE
IS
l_date DATE;
BEGIN
l_date := to_date( p_date_str, p_format_mask );
RETURN l_date;
EXCEPTION
WHEN others THEN
RETURN null;
END my_to_date;
तब आपकी क्वेरी बन जाएगी
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
बेशक, आप MY_TO_DATE
पर फ़ंक्शन-आधारित अनुक्रमणिका चाहते हैं इस क्वेरी को यथोचित रूप से कुशल बनाने के लिए कॉल करें।
12.2 में, Oracle ने to_date
. में एक्सटेंशन जोड़े हैं और cast
त्रुटि वाले रूपांतरणों को संभालने के लिए कार्य करता है
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
आप validate_conversion
. का भी उपयोग कर सकते हैं फ़ंक्शन यदि आप उन सभी पंक्तियों की तलाश कर रहे हैं जो मान्य तिथियां हैं (या नहीं हैं)।
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1