NULLIF (Transact-SQL)

Data aggiornamento: 12 dicembre 2006

Restituisce un valore Null se le due espressioni specificate sono uguali.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

NULLIF ( expression , expression )

Argomenti

Tipi restituiti

Restituisce lo stesso tipo di dati del primo argomento expression.

Se le due espressioni non sono uguali, la funzione NULLIF restituisce la prima expression. Se le espressioni sono uguali, NULLIF restituisce un valore Null del tipo della prima expression.

Osservazioni

NULLIF è equivalente a una funzione CASE avanzata in cui le due espressioni sono uguali e l'espressione risultante è Null.

È consigliabile non utilizzare funzioni dipendenti dal tempo, ad esempio RAND(), in una funzione NULLIF. La funzione potrebbe essere valutata due volte e restituire risultati diversi dalle due chiamate.

Esempi

A. Restituzione degli importi del budget non modificati

Nell'esempio seguente viene creata una tabella budgets per visualizzare un reparto (dept), il relativo budget corrente (current_year) e il relativo budget precedente (previous_year). Per l'anno in corso, viene utilizzato NULL per i reparti in cui il budget dell'anno corrente è uguale a quello dell'anno precedente e 0 per i budget non ancora definiti. Per trovare la media solo dei reparti che ricevono un budget e includere inoltre il valore del budget dell'anno precedente (utilizzare il valore previous_year se current_year è NULL), vengono combinate le funzioni NULLIF e 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

Set di risultati:

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

(1 row(s) affected)

B. Confronto di NULLIF e CASE

Per illustrare la somiglianza tra NULLIF e CASE, nelle query seguenti viene determinato se i valori nelle colonne MakeFlag e FinishedGoodsFlag corrispondono. La prima query utilizza NULLIF. La seconda query utilizza l'istruzione 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

Vedere anche

Riferimento

CASE (Transact-SQL)
decimal e numeric (Transact-SQL)
Funzioni di sistema (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta di informazioni sull'utilizzo di funzioni dipendenti dal tempo all'interno di NULLIF.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta di un esempio in cui viene illustrata la somiglianza tra NULLIF e CASE.