Om du återspeglar Tonys kommentar är det mycket bättre att du lagrar datum i DATE-kolumner istället för att tvinga ett front-end frågeverktyg att hitta och hantera dessa undantag.
Om du har fastnat med en felaktig datamodell är det enklaste alternativet i tidigare versioner att skapa en funktion som gör konverteringen och hanterar felet,
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;
Din fråga blir då
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Naturligtvis vill du sannolikt ha ett funktionsbaserat index på MY_TO_DATE
ring för att göra denna fråga någorlunda effektiv.
I 12.2 har Oracle lagt till tillägg till to_date
och cast
funktioner för att hantera konverteringar som felet
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
Du kan också använda validate_conversion
funktion om du letar efter alla rader som är (eller inte är) giltiga datum.
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1