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.
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, expression1
và expression2
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.
Hãy lấy một số ví dụ về việc sử dụng biểu thức NULLIF
trong SQL Server.
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)
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)
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:
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:
Đầ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:
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.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.
Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.