Cet article a été publié il y a 1 an 9 mois 15 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.Comme tout le monde le sait la division par 0 (zéro) est une opération illégale qui renvoie donc une exception et empêche l’exécution des instructions qui suivent dans un programme informatique.
Cet article est un pense bête qui sera utile la prochaine fois que vous êtes confrontés à ce problème pour ne pas passer une demi-journée à trouver une solution.
Prenons l’exemple d’une requête SQL simple qui retourne la liste des participants à une compétition et affiche cette liste du plus rapide au moins rapide.
La requête devrait ressembler à
SELECT nom FROM COMPETITION ORDER BY distance/temps
Dans le cas ou un seul des enregistrements présent dans cette base de donnée a une valeur de 0 (zéro) dans le champ « temps » l’erreur suivante est renvoyée et l’exécution de la procédure stoppé.
Divide BY zero error encountered.
Pour pallier cette erreur nous allons utiliser la fonction SQL « NullIF »
Notre requête deviendra donc
SELECT nom FROM COMPETITION ORDER BY distance/(NULLIF(temps,0))
Si temps a pour valeur 0 (zéro), la fonction NULLIF substitue cette valeur par NULL et nous ne sommes donc plus face à un problème de division par zéro (à).
Pour information il existe la commande IFNULL qui fait exactement le contraire de NULLIF.
NULLIF(ColumnName, ValueToCompare) : retourne NULL si ColumnName = ValueToCompare
IFNULL(ColumnName, NewValue) : remplace ColumnName par NewValue si ColumnName est NULL
06/08/2010 at 9 h 12 min Permalink
Sympa cette fonction!
C’est dispo sous tous les SGBD? (j’ai googlé vite fait, et j’ai vu que la fonction existe sous MySQL).
06/08/2010 at 13 h 12 min Permalink
J’ai testé sous MySQL et MSSQL/T-SQL, la fonction existe et je n’ai pas testé mais elle existe aussi en Oracle/PLSQL.
10/03/2011 at 16 h 08 min Permalink
très utile, merci