Haciéndose eco del comentario de Tony, sería mucho mejor almacenar fechas en columnas DATE en lugar de forzar una herramienta de consulta de front-end para encontrar y manejar estas excepciones.
Sin embargo, si tiene un modelo de datos incorrecto, la opción más simple en versiones anteriores es crear una función que realice la conversión y maneje el error,
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;
Su consulta se convertiría entonces en
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Por supuesto, lo más probable es que desee un índice basado en funciones en el MY_TO_DATE
llame para que esta consulta sea razonablemente eficiente.
En 12.2, Oracle ha agregado extensiones a to_date
y cast
funciones para manejar conversiones ese error
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
También podría usar validate_conversion
función si está buscando todas las filas que son (o no son) fechas válidas.
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1