NULLIF (Transact-SQL)NULLIF (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Devuelve un valor NULL si las dos expresiones especificadas son iguales.Returns a null value if the two specified expressions are equal. Por ejemplo, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; devuelve NULL para la primera columna (4 y 4) porque los dos valores de entrada son iguales.For example, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; returns NULL for the first column (4 and 4) because the two input values are the same. La segunda columna devuelve el primer valor (5) porque los dos valores de entrada son diferentes.The second column returns the first value (5) because the two input values are different.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

NULLIF ( expression , expression )  

ArgumentosArguments

expressionexpression
Cualquier expresión escalar válida.Is any valid scalar expression.

Tipos devueltosReturn Types

Devuelve el mismo tipo que el primer parámetro expression.Returns the same type as the first expression.

NULLIF devuelve el primer parámetro expression si las dos expresiones no son iguales.NULLIF returns the first expression if the two expressions are not equal. Si las expresiones son iguales, NULLIF devuelve un valor NULL del tipo del primer parámetro expression.If the expressions are equal, NULLIF returns a null value of the type of the first expression.

NotasRemarks

NULLIF equivale a una expresión CASE buscada en la que las dos expresiones son iguales y la expresión resultante es NULL.NULLIF is equivalent to a searched CASE expression in which the two expressions are equal and the resulting expression is NULL.

Se recomienda no usar funciones dependientes del tiempo, como RAND(), dentro de una función NULLIF.We recommend that you not use time-dependent functions, such as RAND(), within a NULLIF function. La función podría evaluarse dos veces y las dos invocaciones podrían devolver resultados diferentes.This could cause the function to be evaluated twice and to return different results from the two invocations.

EjemplosExamples

A.A. Devolver importes del presupuesto que no han cambiadoReturning budget amounts that have not changed

En el ejemplo siguiente se crea una tabla denominada budgets para mostrar un departamento (dept), su presupuesto actual (current_year) y su presupuesto anterior (previous_year).The following example creates a budgets table to show a department (dept) its current budget (current_year) and its previous budget (previous_year). En el año actual se utiliza NULL para los departamentos cuyos presupuestos no han cambiado desde el año anterior y 0 para los presupuestos que aún no se han determinado.For the current year, NULL is used for departments with budgets that have not changed from the previous year, and 0 is used for budgets that have not yet been determined. Para averiguar el promedio de los departamentos que reciben un presupuesto e incluir el valor del presupuesto del año anterior (utilice el valor previous_year cuando el de current_year es NULL), combine las funciones NULLIF y COALESCE.To find out the average of only those departments that receive a budget and to include the budget value from the previous year (use the previous_year value, where the current_year is NULL), combine the NULLIF and COALESCE functions.

CREATE TABLE dbo.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  

El conjunto de resultados es el siguiente.Here is the result set.

Average Budget  
--------------  
212500.000000  
(1 row(s) affected)

B.B. Comparar NULLIF y CASEComparing NULLIF and CASE

Para mostrar la similitud entre NULLIF y CASE, las siguientes consultas determinan si los valores de las columnas MakeFlag y FinishedGoodsFlag coinciden.To show the similarity between NULLIF and CASE, the following queries evaluate whether the values in the MakeFlag and FinishedGoodsFlag columns are the same. En la primera consulta se utiliza NULLIF.The first query uses NULLIF. La segunda consulta utiliza la expresión CASE.The second query uses the CASE expression.

USE AdventureWorks2012;  
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  

C. Devolver importes del presupuesto que no contienen datosC: Returning budget amounts that contain no data

En el siguiente ejemplo se crea una tabla budgets, se cargan datos y se usa NULLIF para devolver un valor null si current_year ni previous_year contienen datos.The following example creates a budgets table, loads data, and uses NULLIF to return a null if neither current_year nor previous_year contains data.

CREATE TABLE budgets (  
   dept           tinyint,  
   current_year   decimal(10,2),  
   previous_year  decimal(10,2)  
);  
  
INSERT INTO budgets VALUES(1, 100000, 150000);  
INSERT INTO budgets VALUES(2, NULL, 300000);  
INSERT INTO budgets VALUES(3, 0, 100000);  
INSERT INTO budgets VALUES(4, NULL, 150000);  
INSERT INTO budgets VALUES(5, 300000, 300000);  
  
SELECT dept, NULLIF(current_year,  
   previous_year) AS LastBudget  
FROM budgets;  

El conjunto de resultados es el siguiente.Here is the result set.

dept   LastBudget  
----   -----------  
1      100000.00  
2      null 
3      0.00  
4      null  
5      null

Consulte tambiénSee Also

CASE (Transact-SQL) CASE (Transact-SQL)
decimal and numeric (Transact-SQL) (decimal y numeric [Transact-SQL])decimal and numeric (Transact-SQL)
Funciones del sistema (Transact-SQL)System Functions (Transact-SQL)