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

Oracle:Undgå NULL-værdi i to_date

Hvis start_date er NULL, ingen undtagelse er kastet.

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

er en perfekt gyldig SQL-sætning, der returnerer NULL.

Den fejl, du får, antyder kraftigt, at i det mindste nogle af rækkerne i start_date kolonnen er faktisk ikke strenge i det format, du forventer, eller den tilknyttede ugyldige datoer (dvs. strengen '13/35/2007'). Du kan skrive en funktion, der tester for at se, om en streng kan konverteres til en dato og returnere enten den konverterede dato eller en NULL. Du kan derefter bruge det i stedet for 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;

og brug derefter my_to_date i stedet for to_date . Det burde fjerne den fejl, du får. Du vil sandsynligvis gerne rydde op i dataene for at slippe af med de ugyldige strenge.



  1. Konverter sql række til kolonner

  2. Import af 8GB mysql dump tager lang tid

  3. Anslået antal rækker, der skal læses

  4. Sum timer fra tidsregistrering til kalender efter dag