NULLIF (Transact-SQL)

Aktualisiert: 12. Dezember 2006

Gibt einen NULL-Wert zurück, wenn die beiden angegebenen Ausdrücke gleich sind.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

NULLIF ( expression , expression )

Argumente

Rückgabetypen

Gibt denselben Typ wie der erste expression-Parameter zurück.

NULLIF gibt den ersten expression-Parameter zurück, wenn die beiden Ausdrücke nicht gleich sind. Wenn die Ausdrücke gleich sind, gibt NULLIF einen NULL-Wert vom Typ des ersten expression-Parameters zurück.

Hinweise

NULLIF entspricht einer komplexen CASE-Funktion, in der die beiden Ausdrücke gleich sind und der sich ergebende Ausdruck NULL ist.

Es empfiehlt sich nicht, zeitabhängige Funktionen wie RAND() innerhalb einer NULLIF-Funktion zu verwenden. Dies könnte dazu führen, dass die Funktion zweimal ausgewertet wird und dass sie aus den beiden Aufrufen unterschiedliche Ergebnisse zurückgibt.

Beispiele

A. Zurückgeben von Budgetsummen, die sich nicht geändert haben

Im folgenden Beispiel wird eine budgets-Tabelle erstellt, die eine Abteilung (dept), ihr aktuelles Jahresbudget (current_year) und ihr Budget vom Vorjahr (previous_year) anzeigt. Für das laufende Jahr wird NULL verwendet, wenn sich das Budget einer Abteilung gegenüber dem Vorjahr nicht verändert hat. Der Wert 0 wird verwendet, wenn das Budget noch nicht festgelegt wurde. Wenn Sie nur für die Abteilungen, die ein Budget erhalten, den Durchschnittswert ermitteln und außerdem die Budgethöhe des vergangenen Jahres einschließen möchten (d. h., wenn Sie den Wert von previous_year verwenden möchten, in dem der Wert für current_year gleich NULL ist), kombinieren Sie die Funktionen NULLIF und 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

Dies ist das Resultset.

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

(1 row(s) affected)

B. Vergleichen von NULLIF und CASE

Als Beispiel für die Ähnlichkeit von NULLIF und CASE wird in den folgenden Abfragen ausgewertet, ob die Werte in den Spalten MakeFlag und FinishedGoodsFlag gleich sind. In der ersten Abfrage wird NULLIF verwendet. In der zweiten Abfrage wird die CASE-Anweisung verwendet.

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

Siehe auch

Verweis

CASE (Transact-SQL)
decimal und numeric (Transact-SQL)
Systemfunktionen (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Neuer Inhalt:
  • Es wurden Informationen zur Verwendung von zeitgebundenen Funktionen innerhalb von NULLIF hinzugefügt.

14. April 2006

Neuer Inhalt:
  • Ein Beispiel für die Ähnlichkeit von NULLIF und CASE wurde hinzugefügt.