.:Bordel-de-Nerd:.

Comment éviter une division par 0 (zéro) en SQL

closeCet article a été publié il y a 2 ans 9 mois 20 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

Category: Développement, SQL Tags :

3 Responses to Comment éviter une division par 0 (zéro) en SQL

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Get Adobe Flash player