Om start_date
är NULL, inget undantag görs.
select to_date( null, 'mm/dd/yyyy' )
from dual
är en perfekt giltig SQL-sats som returnerar NULL.
Felet du får antyder starkt att åtminstone några av raderna i start_date
kolumnen är faktiskt inte strängar i det format du förväntar dig eller som mappar till ogiltiga datum (d.v.s. strängen '13/35/2007'). Du kan skriva en funktion som testar för att se om en sträng kan konverteras till ett datum och returnera antingen det konverterade datumet eller en NULL. Du kan sedan använda det istället för 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;
och använd sedan my_to_date
istället för to_date
. Det borde eliminera felet du får. Du kommer förmodligen att vilja rensa upp data, men för att bli av med de ogiltiga strängarna.