
Resumen:
en este tutorial, aprenderás a usar la expresión NULLIF de SQL Server para devolver NULL si el primer argumento es igual al segundo.
Descripción general de la expresión NULLIF de SQL Server
La expresión NULLIF acepta dos argumentos y devuelve NULL si dos argumentos son iguales, de lo contrario, devuelve la primera expresión, a diferencia de la función ISNULL () de SQL Server que reemplaza NULL con un valor especificado.
A continuación, se muestra la sintaxis de la expresión NULLIF:
NULLIF(expression1, expression2)
En esta sintaxis, expression1 y expression2 son expresiones escalares. Significa que cada uno de ellas se evalúa un valor escalar.
Se recomienda que no utilices las funciones dependientes del tiempo como la función RAND() en la función NULLIF. Porque esto puede hacer que la función se evalúe dos veces y arroje resultados diferentes de las dos llamadas a la función.
Ejemplos de SQL Server NULLIF
Tomemos algunos ejemplos del uso de la expresión NULLIF
Uso de la expresión NULLIF con ejemplos de datos numéricos
Este ejemplo de un SELECT devuelve NULL porque el primer argumento es igual al segundo:
SELECT
NULLIF(10, 10) result;
Resultado:
result
------
NULL
(1 row affected)
Sin embargo, el siguiente ejemplo devuelve el primer argumento porque los dos argumentos no son iguales:
SELECT
NULLIF(20, 10) result;
Resultado:
result
------
20
(1 row affected)
Ejemplo de uso de expresión NULLIF con datos de cadena de caracteres
El siguiente ejemplo usa la expresión NULLIF. Devuelve NULL porque la primera cadena de caracteres es igual a la segunda:
SELECT
NULLIF('Estrada Web Group', 'Estrada Web Group') result;
Resultado:
result
------
NULL
(1 row affected)
Este ejemplo devuelve el primer argumento porque ambos argumentos no son iguales:
SELECT
NULLIF('Estrada Web Group', 'EWG') result;
Resultado:
result
------
Estrada Web Group
(1 row affected)
Usando la expresión NULLIF para traducir una cadena en blanco a NULL
La expresión NULLIF resulta útil cuando se trabaja con datos heredados que contienen una mezcla de cadenas nulas y vacías en una columna. Considera el siguiente ejemplo.
Primero, crea una nueva tabla con CREATE TABLE llamada sales.leads para almacenar los clientes potenciales:
CREATE TABLE sales.leads
(
lead_id INT PRIMARY KEY IDENTITY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
phone VARCHAR(20),
email VARCHAR(255) NOT NULL
);
En segundo lugar, inserta con INSERT INTO tres filas en la tabla sales.leads:
INSERT INTO sales.leads
(
first_name,
last_name,
phone,
email
)
VALUES
(
'John',
'Doe',
'(408)-987-2345',
'john.doe@estradawebgroup.com'
),
(
'Jane',
'Doe',
'',
'jane.doe@estradawebgroup.com'
),
(
'David',
'Doe',
NULL,
'david.doe@estradawebgroup.com'
);
En tercer lugar, consulta los datos de la tabla sales.leads:
SELECT
lead_id,
first_name,
last_name,
phone,
email
FROM
sales.leads
ORDER BY
lead_id;
Resultado:
La columna del teléfono es una columna que acepta valores NULL. Si no se conoce el teléfono de un cliente potencial en el momento de la grabación, la columna de teléfono tendrá NULL.
Sin embargo, a partir de la salida, la segunda fila tiene una cadena vacía en la columna del teléfono debido al error de entrada de datos. Ten en cuenta que puedes encontrar muchas situaciones como está si trabajas con bases de datos heredadas.
Para encontrar los clientes potenciales que no tienen el número de teléfono, utiliza la siguiente consulta:
SELECT
lead_id,
first_name,
last_name,
phone,
email
FROM
sales.leads
WHERE
phone IS NULL;
Resultado:
El resultado perdió una fila que tiene la cadena vacía en la columna del teléfono. Para solucionar este problema, puedes utilizar la expresión NULLIF:
SELECT
lead_id,
first_name,
last_name,
phone,
email
FROM
sales.leads
WHERE
NULLIF(phone,'') IS NULL;
Resultado:
Expresión NULLIF y CASE
Esta expresión que usa NULLIF:
SELECT
NULLIF(a,b)
es equivalente a la siguiente expresión que usa la expresión CASE:
CASE
WHEN a=b THEN NULL
ELSE a
END
Observa el siguiente ejemplo:
DECLARE @a int = 10, @b int = 20;
SELECT
NULLIF(@a,@b) AS result;
Resultado:
result
-----------
10
(1 row affected)
El siguiente ejemplo devuelve el mismo resultado, pero usa la expresión CASE:
DECLARE @a int = 10, @b int = 20;
SELECT
CASE
WHEN @a = @b THEN null
ELSE
@a
END AS result;
La expresión CASE es detallada, mientras que la expresión NULLIF es mucho más corta y legible.
En este tutorial, has aprendido a usar la expresión NULLIF de SQL Server para devolver NULL si el primer argumento es igual al segundo.