Facendo eco al commento di Tony, faresti molto meglio a memorizzare le date nelle colonne DATE piuttosto che forzare uno strumento di query front-end a trovare e gestire queste eccezioni.
Se sei bloccato con un modello di dati errato, tuttavia, l'opzione più semplice nelle versioni precedenti è creare una funzione che esegua la conversione e gestisca l'errore,
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;
La tua richiesta diventerebbe quindi
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Ovviamente, molto probabilmente vorresti un indice basato su funzioni su MY_TO_DATE
chiamare per rendere questa query ragionevolmente efficiente.
Nella versione 12.2, Oracle ha aggiunto estensioni a to_date
e cast
funzioni per gestire le conversioni che generano errori
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
Puoi anche usare il validate_conversion
funzione se stai cercando tutte le righe che sono (o non sono) date valide.
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1