Si start_date
est NULL, aucune exception n'est levée.
select to_date( null, 'mm/dd/yyyy' )
from dual
est une instruction SQL parfaitement valide qui renvoie NULL.
L'erreur que vous obtenez implique fortement qu'au moins certaines des lignes de start_date
ne sont pas réellement des chaînes dans le format que vous attendez ou qui correspondent à des dates invalides (c'est-à-dire la chaîne '13/35/2007'). Vous pouvez écrire une fonction qui teste pour voir si une chaîne peut être convertie en date et renvoie soit la date convertie, soit une valeur NULL. Vous pouvez ensuite l'utiliser à la place de 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;
puis utilisez my_to_date
au lieu de to_date
. Cela devrait éliminer l'erreur que vous obtenez. Cependant, vous souhaiterez probablement nettoyer les données pour vous débarrasser des chaînes non valides.