NULLIF trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức NULLIF trong SQL Server để trả về NULL nếu đối số đầu tiên bằng đối số thứ hai.

Tổng quan về biểu thức NULLIF trong SQL Server

Biểu thức NULLIF chấp nhận hai đối số và trả về NULL nếu hai đối số bằng nhau. Nếu không, nó trả về biểu thức đầu tiên.

Sau đây là cú pháp của biểu thức NULLIF:

NULLIF(expression1, expression2)

Trong cú pháp này, expression1expression2 là các biểu thức vô hướng. Nó có nghĩa là mỗi biểu thức trong số chúng trả về một giá trị vô hướng (scalar value).

Chúng tôi khuyên bạn không nên sử dụng các hàm phụ thuộc vào thời gian như hàm RAND() trong biểu thức NULLIF. Bởi vì điều này có thể khiến biểu thức được đánh giá hai lần và mang lại kết quả khác nhau từ hai lần gọi hàm.

Ví dụ về biểu thức NULLIF trong SQL Server

Hãy lấy một số ví dụ về việc sử dụng biểu thức NULLIF trong SQL Server.

Sử dụng biểu thức NULLIF với các dữ liệu số

Ví dụ này trả về NULL vì đối số đầu tiên bằng đối số thứ hai:

SELECT 
    NULLIF(10, 10) result;

Đây là đầu ra:

result
------
NULL

(1 row affected)

Tuy nhiên, ví dụ sau trả về đối số đầu tiên vì hai đối số không bằng nhau:

SELECT 
    NULLIF(20, 10) result;

Kết quả như sau:

result
------
20

(1 row affected)

Sử dụng biểu thức NULLIF với dữ liệu chuỗi

Ví dụ sau sử dụng biểu thức NULLIF. Nó trả về NULL vì chuỗi đầu tiên bằng chuỗi thứ hai:

SELECT 
    NULLIF('Hello', 'Hello') result;

Đây là đầu ra:

result
------
NULL

(1 row affected)

Ví dụ này trả về đối số đầu tiên vì cả hai đối số không giống nhau:

SELECT 
    NULLIF('Hello', 'Hi') result;

Sau đây là kết quả đầu ra:

result
------
Hello

(1 row affected)

Sử dụng biểu thức NULLIF để chuyển một chuỗi trống sang NULL

Biểu thức NULLIF có ích khi bạn đang làm việc với dữ liệu cũ có chứa một hỗn hợp của NULL và chuỗi rỗng trong một cột. Hãy xem xét ví dụ sau.

Đầu tiên, hãy tạo một bảng mới có tên sales.leads để lưu trữ những người bán hàng hàng đầu:

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

Thứ hai, chèn ba hàng vào bảng sales.leads:

INSERT INTO sales.leads
(
    first_name, 
    last_name, 
    phone, 
    email
)
VALUES
(
    'John', 
    'Doe', 
    '(408)-987-2345', 
    'john.doe@example.com'
),
(
    'Jane', 
    'Doe', 
    '', 
    'jane.doe@example.com'
),
(
    'David', 
    'Doe', 
    NULL, 
    'david.doe@example.com'
);

Thứ ba, truy vấn dữ liệu từ bảng sales.leads:

SELECT 
    lead_id, 
    first_name, 
    last_name, 
    phone, 
    email
FROM 
    sales.leads
ORDER BY
    lead_id;

Đây là đầu ra:

Ví dụ về biểu thức NULLIF trong SQL Server

Cột phone là một cột cho phép giá trị NULL (nullable). Nếu điện thoại của những người bán hàng hàng đầu không được biết tại thời điểm ghi, cột điện thoại sẽ có NULL.

Tuy nhiên, từ kết quả đầu ra, hàng thứ hai có một chuỗi trống trong cột phone do lỗi nhập dữ liệu. Lưu ý rằng bạn có thể gặp phải tình huống như thế này rất nhiều nếu bạn đang làm việc với cơ sở dữ liệu cũ.

Để tìm khách hàng tiềm năng không có số điện thoại, bạn sử dụng truy vấn sau:

SELECT    
    lead_id, 
    first_name, 
    last_name, 
    phone, 
    email
FROM    
    sales.leads
WHERE 
    phone IS NULL;

Đây là đầu ra:

Ví dụ về biểu thức NULLIF trong SQL Server

Đầu ra bị thiếu một hàng có chuỗi trống trong cột phone. Để khắc phục điều này, bạn có thể sử dụng biểu thức NULLIF:

SELECT    
    lead_id, 
    first_name, 
    last_name, 
    phone, 
    email
FROM    
    sales.leads
WHERE 
    NULLIF(phone,'') IS NULL;

Hình ảnh sau đây cho thấy kết quả đầu ra:

Ví dụ về biểu thức NULLIF trong SQL Server

Biểu thức NULLIF so với biểu thức CASE

Câu lệnh này sử dụng biểu thức NULLIF:

SELECT 
    NULLIF(a,b)

tương đương với câu lệnh sau sử dụng biểu thức CASE:

CASE 
    WHEN a=b THEN NULL 
    ELSE a 
END

Xem ví dụ sau:

DECLARE @a int = 10, @b int = 20;
SELECT
    NULLIF(@a,@b) AS result;

Đây là đầu ra:

result
-----------
10

(1 row affected)

Ví dụ sau trả về cùng một kết quả, nhưng thay vào đó hãy sử dụng biểu thức CASE:

DECLARE @a int = 10, @b int = 20;
SELECT
    CASE
        WHEN @a = @b THEN null
        ELSE 
            @a
    END AS result;

Biểu thức CASE thì dài dòng trong khi biểu thức NULLIF thì ngắn hơn nhiều và dễ đọc hơn.

Trong hướng dẫn này, bạn đã học cách sử dụng biểu thức NULLIF trong SQL Server để trả về NULL nếu đối số đầu tiên bằng đối số thứ hai.

SQL Server
Bài Viết Liên Quan:
Hướng dẫn đầy đủ về Expression trong SQL Server
Trung Nguyen 18/03/2021
Hướng dẫn đầy đủ về Expression trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE, COALESCE và NULLIF trong SQL Server.

COALESCE trong SQL Server
Trung Nguyen 18/03/2021
COALESCE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức COALESCE trong SQL Server để xử lý giá trị NULL trong các truy vấn.

CASE trong SQL Server
Trung Nguyen 18/03/2021
CASE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE trong SQL Server để thêm logic if-else vào các truy vấn SQL.

MERGE trong SQL Server
Trung Nguyen 18/03/2021
MERGE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh MERGE trong SQL Server để cập nhật dữ liệu trong bảng dựa trên các giá trị được khớp từ một bảng khác.