Ecoando o comentário de Tony, seria muito melhor armazenar datas em colunas DATE em vez de forçar uma ferramenta de consulta de front-end a encontrar e manipular essas exceções.
No entanto, se você estiver preso a um modelo de dados incorreto, a opção mais simples nas versões anteriores é criar uma função que faça a conversão e lide com o erro,
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;
Sua consulta então se tornaria
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Obviamente, você provavelmente desejaria um índice baseado em função no
MY_TO_DATE
call para tornar essa consulta razoavelmente eficiente. Na versão 12.2, a Oracle adicionou extensões ao
to_date
e cast
funções para lidar com conversões que erro SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
Você também pode usar o
validate_conversion
função se você estiver procurando por todas as linhas que são (ou não) datas válidas. SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1