Compartir a través de


NULLIF (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Warehouse en Microsoft Fabric Base de datos SQL de Microsoft Fabric

Devuelve un valor NULL si las dos expresiones especificadas son iguales. 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. La segunda columna devuelve el primer valor (5) porque los dos valores de entrada son diferentes.

Convenciones de sintaxis de Transact-SQL

Sintaxis

NULLIF ( expression , expression )  

Argumentos

expression
Cualquier expresión escalar válida.

Tipos de valor devuelto

Devuelve el mismo tipo que el primer parámetro expression.

NULLIF devuelve el primer parámetro expression si las dos expresiones no son iguales. Si las expresiones son iguales, NULLIF devuelve un valor NULL del tipo del primer parámetro expression.

Comentarios

NULLIF equivale a una expresión CASE buscada en la que las dos expresiones son iguales y la expresión resultante es NULL.

Se recomienda no usar funciones dependientes del tiempo, como RAND(), dentro de una función NULLIF. La función podría evaluarse dos veces y las dos invocaciones podrían devolver resultados diferentes.

Ejemplos

A. Devolver importes del presupuesto que no han cambiado

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). 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. 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.

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  

Este es el conjunto de resultados.

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

B. Comparar NULLIF y CASE

Para mostrar la similitud entre NULLIF y CASE, las siguientes consultas determinan si los valores de las columnas MakeFlag y FinishedGoodsFlag coinciden. En la primera consulta se utiliza NULLIF. La segunda consulta utiliza la expresión CASE.

USE AdventureWorks2022;  
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 datos

En el siguiente ejemplo se crea una tabla budgets, se cargan datos y se usa NULLIF para devolver un valor null si current_year es null o contiene los mismos datos que previous_year.


Copy
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;  

Este es el conjunto de resultados.

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

Consulte también

CASE (Transact-SQL)
decimal y numeric (Transact-SQL)
Funciones del sistema (Transact-SQL)