SQL

Cómo usar la expresión NULLIF de SQL Server para devolver NULL si el primer argumento es igual al segundo

Estrada Web Group
jiestrada
Cómo usar la expresión NULLIF de SQL Server para devolver NULL si el primer argumento es igual al segundo

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:

NULLIF SQL Server

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:

FUNCION NULLIF DE SQL SERVER

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:

Funcion NULLIF y CASE

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.

Compartir artículo:

Más artículos geniales

¿Qué es PRIMARY KEY en SQL Server y cómo funciona?

¿Qué es PRIMARY KEY en SQL Server y cómo funciona?

En este tutorial de SQL Server, aprenderá a usar la restricción PRIMARY KEY de SQL Server para crear una llave primaria para una tabla.

Ver artículo completo
Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Resumen: en este tutorial, aprenderás sobre la lógica de los valores NULL en SQL Server. También aprenderás a usar los operadores IS NULL y IS NOT NULL para probar si un valor es NULL o no.

Ver artículo completo
¿Cómo agregar una columna a una tabla en SQL?

¿Cómo agregar una columna a una tabla en SQL?

En este post veremos cómo agregar, eliminar y cambiar columnas a una tabla en SQL Server. ¿Cómo agregar una columna a una tabla existente en SQL Server?

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla ;