Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:evitare il valore NULL in to_date

Se start_date è NULL, non viene generata alcuna eccezione.

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

è un'istruzione SQL perfettamente valida che restituisce NULL.

L'errore che stai ricevendo implica fortemente che almeno alcune delle righe nella start_date le colonne non sono in realtà stringhe nel formato previsto o che mappano a date non valide (ad esempio la stringa "35/13/2007"). È possibile scrivere una funzione che verifichi se una stringa può essere convertita in una data e restituire la data convertita o un NULL. Puoi quindi usarlo al posto di to_date .

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;

e poi usa my_to_date invece di to_date . Ciò dovrebbe eliminare l'errore che stai ricevendo. Probabilmente vorrai ripulire i dati, però, per sbarazzarti delle stringhe non valide.