Gérer les valeurs NULL

Effectué

Une valeur NULL signifie aucune valeur ou inconnu. Elle ne signifie pas zéro ou vide, ou même une chaîne vide. Ces valeurs ne sont pas inconnues. Une valeur NULL peut être utilisée pour les valeurs qui n’ont pas encore été fournies, par exemple lorsqu’un client n’a pas encore fourni d’adresse de messagerie. Comme vous l’avez vu précédemment, une valeur NULL peut également être retournée par certaines fonctions de conversion si une valeur n’est pas compatible avec le type de données cible.

Vous devez souvent prendre des mesures spéciales pour traiter la valeur NULL. NULL est plutôt une absence de valeur. Elle est inconnue. Elle n’est égale à rien et n’est pas non égale à quoi que ce soit. La valeur NULL n’est supérieure ou inférieure à rien. Nous ne pouvons rien dire sur ce qu’elle est, mais il est parfois nécessaire de travailler avec des valeurs NULL. Heureusement, T-SQL fournit des fonctions de conversion ou de remplacement de valeurs NULL.

ISNULL

La fonction ISNULL prend deux arguments. Le premier est une expression que nous testons. Si la valeur du premier argument est NULL, la fonction retourne le second argument. Si la première expression n’est pas null, elle est retournée inchangée.

Par exemple, supposons que la table Sales.Customer dans une base de données comprenne une colonne MiddleName qui autorise les valeurs NULL. Lors de l’interrogation de cette table, au lieu de retourner NULL dans le résultat, vous pouvez choisir de retourner une valeur spécifique, telle que « None ».

SELECT FirstName,
      ISNULL(MiddleName, 'None') AS MiddleIfAny,
      LastName
FROM Sales.Customer;

Les résultats de cette requête peuvent se présenter comme suit :

FirstName

MiddleIfAny

LastName

Orlando

N.

Gee

Keith

Aucun

Howard

Donna

F.

Gonzales

...

...

...

Notes

La valeur substituée à NULL doit être du même type de données que l’expression en cours d’évaluation. Dans l’exemple ci-dessus, MiddleName est un varchar, donc la valeur de remplacement ne peut pas être numérique. En outre, vous devez choisir une valeur qui n’apparaîtra pas dans les données comme une valeur normale. Il peut parfois être difficile de trouver une valeur qui n’apparaîtra jamais dans vos données.

L’exemple précédent gérait une valeur NULL dans la table source, mais vous pouvez utiliser ISNULL avec n’importe quelle expression susceptible de retourner une valeur NULL, notamment en imbriquant une fonction TRY_CONVERT dans une fonction ISNULL.

COALESCE

La fonction ISNULL ne figurant pas dans la norme ANSI, vous souhaiterez peut-être utiliser la fonction COALESCE à la place. COALESCE est un peu plus flexible : elle peut accepter un nombre variable d’arguments, chacun d’entre eux étant une expression. Elle retourne la première expression de la liste qui n’a pas la valeur NULL.

S’il n’y a que deux arguments, COALESCE se comporte comme ISNULL. Toutefois, avec plus de deux arguments, COALESCE peut être utilisée comme alternative à une expression CASE à plusieurs parties avec ISNULL.

Si tous les arguments sont NULL, COALESCE retourne la valeur NULL. Toutes les expressions doivent retourner les mêmes types de données ou des types de données compatibles.

La syntaxe est la suivante :

SELECT COALESCE ( expression1, expression2, [ ,...n ] )

L’exemple suivant utilise une table fictive appelée HR.Wages, qui comprend trois colonnes avec des informations sur les résultats hebdomadaires des employés : taux horaire, salaire hebdomadaire et commission par unité vendue. Cependant, chaque employé ne perçoit qu'un seul type de salaire. Pour chaque employé, l’une de ces trois colonnes aura une valeur, et les deux autres la valeur NULL. Pour déterminer le montant total payé à chaque employé, vous pouvez utiliser COALESCE pour retourner uniquement la valeur non null trouvée dans ces trois colonnes.

SELECT EmployeeID,
      COALESCE(HourlyRate * 40,
                WeeklySalary,
                Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;

Les résultats devraient ressembler à ceci :

EmployeeID (IDEmployé)

WeeklyEarnings

1

899.76

2

1001.00

3

1298.77

...

...

NULLIF

La fonction NULLIF vous permet de retourner la valeur NULL sous certaines conditions. Cette fonction a des applications utiles dans des domaines tels que le nettoyage de données, lorsque vous souhaitez remplacer des espaces blancs ou des espaces réservés par des valeurs NULL.

NULLIF accepte deux arguments et retourne la valeur NULL s’ils sont équivalents. S’ils ne sont pas égaux, NULLIF retourne le premier argument.

Dans cet exemple, NULLIF remplace une remise de 0 par une valeur NULL. Elle retourne la valeur de la remise si elle n’est pas égale à 0 :

SELECT SalesOrderID,
      ProductID,
      UnitPrice,
      NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;

Les résultats devraient ressembler à ceci :

SalesOrderID

ProductID

UnitPrice

Remise

71774

836

356.898

NULL

71780

988

112.998

0.4

71781

748

818.7

NULL

71781

985

112.998

0.4

...

...

...

...