Trong MySQL, đôi khi bạn không muốn các giá trị NULL được trả về dưới dạng NULL
. Đôi khi bạn muốn các giá trị NULL được trả về với một giá trị khác, chẳng hạn như “Không áp dụng”, “Không áp dụng”, “Không có” hoặc thậm chí là chuỗi trống “”.
May mắn thay, có một số cách để thực hiện việc này trong MySQL.
Đây là bốn:
-
IFNULL()
chức năng -
COALESCE()
chức năng -
IF()
hàm kết hợp vớiIS NULL
(hoặcIS NOT NULL
) toán tử -
CASE
biểu thức kết hợp vớiIS NULL
(hoặcIS NOT NULL
) toán tử
Dưới đây là ví dụ về các tùy chọn này.
Dữ liệu mẫu
Trước tiên, hãy lấy một số dữ liệu mẫu:
USE Solutions; SELECT TaskCode From Tasks;
Kết quả:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Vì vậy, chúng tôi có ba giá trị NULL và ba giá trị không phải NULL.
Hàm IFNULL ()
Với tên của nó, đây có lẽ là tùy chọn rõ ràng nhất để thay thế các giá trị NULL trong MySQL. Hàm này về cơ bản tương đương với ISNULL()
trong SQL Server.
IFNULL()
hàm cho phép bạn cung cấp hai đối số. Đối số đầu tiên chỉ được trả về nếu nó không phải là NULL. Nếu nó là NULL, thì đối số thứ hai được trả về thay thế.
Dưới đây là một ví dụ về việc sử dụng IFNULL()
dựa trên tập dữ liệu mẫu của chúng tôi:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Kết quả:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Ở đây, chúng tôi chỉ cần thay thế các giá trị NULL bằng N/A
.
Hàm COALESCE ()
Hàm này tương tự như IFNULL()
chức năng, nhưng hơi khác. Hàm này tuân theo tiêu chuẩn ANSI SQL và nó được triển khai rộng rãi trên các RDBMS khác nhau.
Cách thức hoạt động của nó là bạn cung cấp bao nhiêu đối số mà bạn cần. COALESCE()
sau đó sẽ trả về không phải NULL
đầu tiên giá trị trong danh sách hoặc NULL
nếu không có không phải NULL
giá trị.
Như thế này:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Kết quả:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Vì vậy, chúng tôi nhận được kết quả chính xác như trước đây.
Tuy nhiên, sự khác biệt với hàm này là, như đã đề cập, bạn có thể cung cấp một danh sách các đối số. COALESCE()
hàm sẽ nhận giá trị nào không phải NULL đầu tiên.
Vì vậy, ví dụ:chúng ta có thể thêm NULL
làm đối số đầu tiên và đặt None
trước N/A
và xem điều gì sẽ xảy ra:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Kết quả:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Nó đã bỏ qua NULL
đầu tiên như mong đợi, sau đó nó bỏ qua bất kỳ giá trị NULL nào trong TaskCode
trước khi giải quyết None
. N/A
value không được sử dụng trong trường hợp này vì None
đến trước và đó là giá trị không phải NULL.
Hàm IF () Kết hợp với IS NULL / IS NOT NULL
IS NULL
và IS NOT NULL
toán tử cho phép bạn kiểm tra các giá trị NULL và hiển thị một giá trị khác tùy thuộc vào kết quả.
Chúng ta có thể sử dụng các toán tử này bên trong IF()
để các giá trị không phải NULL được trả về và các giá trị NULL được thay thế bằng một giá trị do chúng tôi chọn.
Ví dụ:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Kết quả:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Vì vậy, kết quả tương tự như với IFNULL()
và COALESCE()
các chức năng.
Và tất nhiên, chúng ta có thể hoán đổi IS NOT NULL
với IS NULL
. Nếu chúng ta làm điều đó, chúng ta cũng cần phải hoán đổi các đối số tiếp theo:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
Biểu thức trường hợp kết hợp với IS NULL / IS NOT NULL
Một cách khác để làm điều đó là sử dụng CASE
biểu thức:
SELECT CASE WHEN TaskCode IS NOT NULL THEN TaskCode ELSE 'N/A' END AS Result FROM Tasks;
Kết quả:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Như với ví dụ trước, điều này có thể được viết lại để sử dụng IS NULL
thay vì IS NOT NULL
:
SELECT CASE WHEN TaskCode IS NULL THEN 'N/A' ELSE TaskCode END AS Result FROM Tasks;