NULLIF (Transact-SQL)
Mis à jour : 12 décembre 2006
Retourne une valeur NULL si les deux expressions spécifiées sont égales.
Conventions de syntaxe de Transact-SQL
Syntaxe
NULLIF ( expression , expression )
Arguments
expression
Toute expression scalaire valide.Pour plus d'informations, consultez Expressions (Transact-SQL).
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 |
|
14 avril 2006 |
|