NULLIF (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Devuelve un valor NULL si las dos expresiones especificadas son iguales.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

NULLIF ( expression , expression )

Argumentos

Tipos de valor devueltos

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

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

Notas

NULLIF equivale a una funció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.

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

Éste 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 instrucción 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

Vea también

Referencia

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

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se agregó información acerca del uso de las funciones sensibles al tiempo dentro de NULLIF.

14 de abril de 2006

Contenido nuevo:
  • Se ha agregado un ejemplo que muestra la similitud entre NULLIF y CASE.