Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :Éviter la valeur NULL dans to_date

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.