Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

4 cách để thay thế NULL bằng một giá trị khác trong MySQL

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ới IS NULL (hoặc IS NOT NULL ) toán tử
  • CASE biểu thức kết hợp với IS NULL (hoặc IS 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 NULLIS 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()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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE [HY000] [1045] Quyền truy cập bị từ chối đối với người dùng 'tên người dùng' @ 'localhost' bằng CakePHP

  2. Nhiều truy vấn được thực thi trong java trong một câu lệnh

  3. Enum in Hibernate, kiên trì với tư cách là một enum

  4. Cách tạo blog trong cơ sở dữ liệu PHP và MySQL - Backend

  5. Làm thế nào để có được kích thước cơ sở dữ liệu MySQL cho cơ sở dữ liệu của bạn?