Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Vermeidung von NULL-Wert in to_date

Wenn start_date NULL ist, wird keine Ausnahme ausgelöst.

select to_date( null, 'mm/dd/yyyy' ) 
  from dual

ist eine vollkommen gültige SQL-Anweisung, die NULL zurückgibt.

Der Fehler, den Sie erhalten, deutet stark darauf hin, dass zumindest einige der Zeilen im start_date Spalte sind nicht wirklich Zeichenfolgen in dem Format, das Sie erwarten, oder die ungültigen Datumsangaben zugeordnet sind (z. B. die Zeichenfolge „35.13.2007“). Sie können eine Funktion schreiben, die testet, ob eine Zeichenfolge in ein Datum konvertiert werden kann, und entweder das konvertierte Datum oder NULL zurückgibt. Sie können das dann anstelle von to_date verwenden .

CREATE OR REPLACE FUNCTION my_to_date( p_str    IN VARCHAR2,
                                       p_format IN VARCHAR2 )
  RETURN DATE
IS
BEGIN
  RETURN to_date( p_str, p_format );
EXCEPTION
  WHEN OTHERS
  THEN
    RETURN NULL;
END;

und verwenden Sie dann my_to_date statt to_date . Das sollte den Fehler beseitigen, den Sie erhalten. Wahrscheinlich möchten Sie die Daten jedoch bereinigen, um die ungültigen Zeichenfolgen zu entfernen.