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

Comment remplacer NULL par une autre valeur dans SQL Server - ISNULL()

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.