Lors de l'interrogation d'une base de données SQL Server, il peut arriver que vous ne souhaitiez pas que des valeurs nulles soient renvoyées dans votre jeu de résultats. Et il peut arriver que vous vouliez qu'ils vous soient rendus. Mais il peut aussi y avoir des moments où vous souhaitez qu'ils soient renvoyés, mais sous une valeur différente.
C'est ce que le ISNULL()
la fonction est pour.
ISNULL()
est une fonction T-SQL qui permet de remplacer NULL
avec une valeur spécifiée de votre choix.
Exemple
Voici une requête de base qui renvoie un petit ensemble de résultats :
SELECT TaskCode AS Result FROM Tasks;
Résultat :
Result ------ cat123 null null pnt456 rof789 null
Nous pouvons voir qu'il y a trois lignes qui contiennent des valeurs nulles.
Si nous ne voulions pas que les valeurs nulles apparaissent comme telles, nous pourrions utiliser ISNULL()
pour remplacer null
avec une valeur différente.
Comme ceci :
SELECT ISNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Résultat :
Result ------ cat123 N/A N/A pnt456 rof789 N/A
On pourrait aussi le remplacer par la chaîne vide :
SELECT ISNULL(TaskCode, '') AS Result FROM Tasks;
Résultat :
Result ------ cat123 pnt456 rof789
Notez que ISNULL()
requiert que le deuxième argument soit d'un type qui peut être implicitement converti dans le type de données du premier argument. C'est parce qu'il renvoie le résultat en utilisant le type de données du premier argument.
Empêcher la disparition des lignes nulles
Il existe certaines fonctions T-SQL dans lesquelles les valeurs nulles sont éliminées du jeu de résultats. Dans de tels cas, les valeurs nulles ne seront pas du tout renvoyées.
Bien que cela puisse être un résultat souhaitable dans certains cas, dans d'autres cas, cela pourrait être désastreux, selon ce que vous devez faire avec les données une fois qu'elles sont renvoyées.
Un exemple d'une telle fonction est STRING_AGG()
. Cette fonction permet de renvoyer le jeu de résultats sous forme de liste délimitée. Cependant, il élimine également les valeurs nulles du jeu de résultats. Donc, si nous utilisons cette fonction avec les exemples de données ci-dessus, nous obtiendrons trois résultats au lieu de six :
SELECT STRING_AGG(TaskCode, ', ') AS Result FROM Tasks;
Résultat :
Result ---------------------- cat123, pnt456, rof789
Ainsi, les trois lignes contenant des valeurs nulles ne sont pas renvoyées.
Dans de nombreux cas, il s'agit d'un résultat parfait, car notre jeu de résultats n'est pas encombré de valeurs nulles. Cependant, cela pourrait également causer des problèmes, selon l'utilisation des données.
Par conséquent, si nous voulons conserver les lignes avec des valeurs nulles, nous pouvons utiliser ISNULL()
pour remplacer les valeurs nulles par une autre valeur :
SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Résultat :
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
La fonction COALESCE()
Le ISNULL()
la fonction fonctionne de manière similaire à la COALESCE()
une fonction. Nous pourrions donc remplacer le code ci-dessus par ceci :
SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Et obtenez le même résultat :
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
Cependant, il existe des différences dans la façon dont les deux fonctions se comportent. Pour plus d'informations sur les différences, voici une comparaison de COALESCE()
et ISNULL()
sur le site Web de Microsoft.