In Anlehnung an Tonys Kommentar wäre es viel besser, Datumsangaben in DATE-Spalten zu speichern, als ein Front-End-Abfragetool zu zwingen, diese Ausnahmen zu finden und zu behandeln.
Wenn Sie jedoch mit einem falschen Datenmodell stecken bleiben, besteht die einfachste Option in früheren Versionen darin, eine Funktion zu erstellen, die die Konvertierung durchführt und den Fehler behandelt,
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;
Ihre Abfrage würde dann zu
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Natürlich möchten Sie höchstwahrscheinlich einen funktionsbasierten Index für MY_TO_DATE
aufrufen, um diese Abfrage einigermaßen effizient zu machen.
In 12.2 hat Oracle Erweiterungen zu to_date
hinzugefügt und cast
Funktionen zum Umgang mit fehlerhaften Konvertierungen
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
Sie könnten auch den validate_conversion
verwenden Funktion, wenn Sie nach allen Zeilen suchen, die gültige Daten sind (oder nicht).
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1