Đã bao giờ bạn từng tìm hiểu về một phương thức cho phép chúng ta có thể thực hiện so sánh hai giá trị đầu vào và trả về một thông tin hữu ích khi sử dụng T-SQL chưa? Trên thực tế, hàm này hoàn toàn có tồn tại và có thể được sử dụng nếu cơ sở dữ liệu của bạn là SQL Server. Trong bài viết này, Stringee và các bạn sẽ cùng nhau tìm hiểu về nó nhé.

1. Cú pháp và cách sử dụng hàm NULLIF trong SQL Server

Hàm sẽ trả về một giá trị null nếu hai giá trị được đem ra so sánh là bằng nhau, return giá trị đầu tiên được đem ra so sánh nếu hai giá trị khác nhau.

Cú pháp thực hiện:

NULLIF ( expression , expression )

2. Các biến đầu vào cho phép

Hàm NULLIF trong SQL Server có thể nhận vào bất cứ giá trị biến nào miễn nó là hợp lệ.

Kết quả của hàm sẽ trả về dạng của giá trị được đem ra so sánh đầu tiên. Nếu phép so sánh không trả về kết quả bằng nhau, nó sẽ trả về giá trị đầu tiên được truyền vào hàm. Nếu so sánh là bằng, giá trị NULL sẽ được trả về.

NULLIF được cho là bằng với một truy vấn CASE nếu hai biến so sánh là bằng nhau và kết quả trả về sẽ là NULL.

Không nên sử dụng các hàm có sự phụ thuộc vào thời gian như RAN() trong hàm NULLIF vì nó có thể làm cho thời gian thực hiện function tăng gấp đôi để trả về kết quả từ các nội dung trả về bởi RAND().

3. Các ví dụ cụ thể

3.1. Trả lại số tiền ngân sách không thay đổi

Ví dụ sau đây tạo bảng ngân sách để hiển thị ngân sách hiện tại của một bộ phận (phòng ban) (current_year) và ngân sách trước đó (previous_year). Đối với năm hiện tại, NULL được sử dụng cho các phòng ban có ngân sách không thay đổi so với năm trước và 0 được sử dụng cho ngân sách chưa được xác định. Để tìm ra mức trung bình của chỉ những phòng ban nhận được ngân sách và bao gồm giá trị ngân sách từ năm trước (sử dụng giá trị previous_year, trong đó current_year là NULL), hãy kết hợp các hàm NULLIF và COALESCE.

CREATE TABLE dbo.budgets  
(  
   dept            TINYINT   IDENTITY,  
   current_year    DECIMAL   NULL,  
   previous_year   DECIMAL   NULL  
);  
INSERT budgets VALUES(100000, 150000);  
INSERT budgets VALUES(NULL, 300000);  
INSERT budgets VALUES(0, 100000);  
INSERT budgets VALUES(NULL, 150000);  
INSERT budgets VALUES(300000, 250000);  
GO    
SET NOCOUNT OFF;  
SELECT AVG(NULLIF(COALESCE(current_year,  
   previous_year), 0.00)) AS [Average Budget]  
FROM budgets;  
GO

Result set sẽ là:

Average Budget  
--------------  
212500.000000  
(1 row(s) affected)

>>> Xem thêm bài viết về SQL:

Tìm hiểu về cơ sở dữ liệu phi quan hệ MongoDB

Hướng dẫn sử dụng Subquery trong SQL

Tìm hiểu về ràng buộc (Constraint) trong SQL

3.2. So sánh NULLIF và CASE

Để thể hiện sự giống nhau giữa NULLIF và CASE, các truy vấn sau đây sẽ đánh giá xem các giá trị trong cột MakeFlag và FinishedGoodsFlag có giống nhau hay không. Truy vấn đầu tiên sử dụng NULLIF. Truy vấn thứ hai sử dụng biểu thức CASE.

USE AdventureWorks2022;  
GO  
SELECT ProductID, MakeFlag, FinishedGoodsFlag,   
   NULLIF(MakeFlag,FinishedGoodsFlag) AS [Null if Equal]  
FROM Production.Product  
WHERE ProductID < 10;  
GO  
  
SELECT ProductID, MakeFlag, FinishedGoodsFlag, [Null if Equal] =  
   CASE  
       WHEN MakeFlag = FinishedGoodsFlag THEN NULL  
       ELSE MakeFlag  
   END  
FROM Production.Product  
WHERE ProductID < 10;  
GO

3.3. Trả về số tiền ngân sách không chứa dữ liệu

Ví dụ sau đây tạo bảng ngân sách, tải dữ liệu và sử dụng NULLIF để trả về giá trị rỗng nếu current_year là null hoặc chứa cùng dữ liệu với previous_year.

CREATE TABLE budgets (  
   dept           TINYINT,  
   current_year   DECIMAL(10,2),  
   previous_year  DECIMAL(10,2)  
);  
  
INSERT INTO budgets VALUES(1, 100000, 150000);  
INSERT INTO budgets VALUES(2, NULL, 300000);  
INSERT INTO budgets VALUES(3, 0, 100000);  
INSERT INTO budgets VALUES(4, NULL, 150000);  
INSERT INTO budgets VALUES(5, 300000, 300000);  
  
SELECT dept, NULLIF(current_year,  
   previous_year) AS LastBudget  
FROM budgets;

Result set là

dept   LastBudget  
----   -----------  
1      100000.00  
2      null 
3      0.00  
4      null  
5      null

Kết bài

Trên đây là những chia sẻ của Stringee về hàm NULLIF trong SQL Server, bạn có thể sử dụng hàm này trong các trường hợp cần so sánh sử dụng đầu vào là kết quả của nhiều truy vấn hoặc tạo một bản thống kê các dữ liệu cần thiết để so sánh với các tập dữ liệu khác nhau.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: