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:
Sequence trong SQL Server
Trung Nguyen 31/07/2021
Sequence trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu về các đối tượng Sequence trong SQL Server để tạo ra một chuỗi các giá trị số dựa trên một đặc tả cụ thể.

Cột Identity trong SQL Server
Trung Nguyen 30/07/2021
Cột Identity trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng thuộc tính IDENTITY trong SQL Server để thêm cột định danh vào bảng.

CREATE TABLE trong SQL Server
Trung Nguyen 29/07/2021
CREATE TABLE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh CREATE TABLE trong SQL Server để tạo một bảng mới.

Ràng buộc NOT NULL trong SQL Server
Trung Nguyen 28/07/2021
Ràng buộc NOT NULL trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng ràng buộc NOT NULL trong SQL Server để đảm bảo một cột không chứa dữ liệu NULL.