NULLIF (Transact-SQL)

Mis à jour : 12 décembre 2006

Retourne une valeur NULL si les deux expressions spécifiées sont égales.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

NULLIF ( expression , expression )

Arguments

Notes

NULLIF est équivalent à l'exécution d'une fonction CASE dans laquelle les deux expressions sont identiques et l'expression résultante est NULL.

Il est recommandé de ne pas utiliser de fonction dépendant du temps, telle que RAND(), dans une fonction NULLIF. Ceci pourrait entraîner une évaluation à deux reprises de la fonction, et des résultats différents pourraient être retournés à partir des deux appels.

Types de retour

Retourne le même type que la première expression.

NULLIF retourne la première expression si les deux expressions ne sont pas égales. Si elles sont égales, NULLIF retourne une valeur Null du type de la première expression.

Exemples

A. Retour des montants de budget qui n'ont pas changé

L'exemple suivant crée une table budgets où sont répertoriés un service (dept), son budget pour l'année en cours (current_year) et son budget pour l'année précédente (previous_year). Pour l'année en cours, NULL est utilisé pour les services dont les budgets n'ont pas été modifiés par rapport à l'année précédente et 0 est utilisé pour les budgets qui n'ont pas été déterminés. Pour obtenir la moyenne des seuls services auxquels un budget a été attribué et pour inclure la valeur budgétaire de l'année précédente (utilisez la valeur previous_year dans les cas où la valeur pour current_year est NULL), combinez les fonctions NULLIF et COALESCE.

USE AdventureWorks;
GO
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'budgets')
   DROP TABLE budgets;
GO
SET NOCOUNT ON;
CREATE TABLE budgets
(
   dept            tinyint   IDENTITY,
   current_year      decimal   NULL,
   previous_year   decimal   NULL
);
INSERT budgets VALUES(100000, 150000);
INSERT budgets VALUES(NULL, 300000);
INSERT budgets VALUES(0, 100000);
INSERT budgets VALUES(NULL, 150000);
INSERT budgets VALUES(300000, 250000);
GO  
SET NOCOUNT OFF;
SELECT AVG(NULLIF(COALESCE(current_year,
   previous_year), 0.00)) AS 'Average Budget'
FROM budgets;
GO

Voici l'ensemble des résultats.

Average Budget                           
---------------------------------------- 
212500.000000

(1 row(s) affected)

B. Comparaison de NULLIF et CASE

Pour montrer la similarité entre NULLIF et CASE, les requêtes suivantes déterminent si les valeurs des colonnes MakeFlag et FinishedGoodsFlag sont les mêmes. La première requête utilise NULLIF. La seconde utilise l'instruction CASE.

USE AdventureWorks;
GO

SELECT ProductID, MakeFlag, FinishedGoodsFlag, 
   NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal'
FROM Production.Product
WHERE ProductID < 10;
GO

SELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' =
   CASE
       WHEN MakeFlag = FinishedGoodsFlag THEN NULL
       ELSE MakeFlag
   END
FROM Production.Product
WHERE ProductID < 10;
GO

Voir aussi

Référence

CASE (Transact-SQL)
decimal et numeric (Transact-SQL)
Fonctions système (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Nouveau contenu :
  • Ajout d'informations sur l'utilisation des fonctions pour lesquelles le temps est important dans NULLIF.

14 avril 2006

Nouveau contenu :
  • Ajout d'un exemple qui montre la similarité entre NULLIF et CASE.