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

MySQL IFNULL () Giải thích

MySQL có IFNULL() cho phép chúng tôi dễ dàng thay thế các giá trị NULL bằng một giá trị khác.

Cú pháp

IFNULL(expr1,expr2)

Nếu expr1 không phải là NULL , IFNULL() trả về expr1 ; nếu không nó trả về expr2 .

Ví dụ

Đây là một ví dụ cơ bản sử dụng NULL hằng số:

SELECT IFNULL( null, 'n/a' );

Kết quả:

n/a

Trong trường hợp này, tôi đã sử dụng IFNULL() để thay thế giá trị NULL bằng chuỗi n/a .

Đây là những gì sẽ xảy ra khi đối số đầu tiên không phải là NULL :

SELECT IFNULL( 'Cow', 'n/a' );

Kết quả:

Cow

Trong trường hợp này, đối số đầu tiên được trả về vì nó không phải là NULL .

Ví dụ về cơ sở dữ liệu

Giả sử chúng ta chạy truy vấn sau:

SELECT
    PetName,
    DOB
FROM Pets;

Kết quả:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
| Woof    | 2020-10-03 |
| Ears    | 2022-01-11 |
+---------+------------+

Chúng ta có thể thấy rằng hai hàng có giá trị NULL trong cột DOB.

Trong truy vấn sau, chúng tôi sử dụng IFNULL() để thay thế các giá trị NULL bằng một giá trị có ý nghĩa hơn cho người đọc:

SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Kết quả:

+---------+--------------------------------+
| PetName | IFNULL( DOB, 'None supplied' ) |
+---------+--------------------------------+
| Fluffy  | 2020-11-20                     |
| Fetch   | 2019-08-16                     |
| Scratch | 2018-10-01                     |
| Wag     | 2020-03-15                     |
| Tweet   | 2020-11-28                     |
| Fluffy  | 2020-09-17                     |
| Bark    | None supplied                  |
| Meow    | None supplied                  |
| Woof    | 2020-10-03                     |
| Ears    | 2022-01-11                     |
+---------+--------------------------------+

Biểu thức

Giá trị hiện tại của đối số đầu tiên được đánh giá. Do đó, nếu chúng tôi cung cấp một biểu thức như sau:

SELECT IFNULL( 2 * 5, 0 );

Chúng tôi nhận được điều này:

10

Vì vậy, chúng tôi không nhận được 2 * 5 phần. Chúng tôi nhận được kết quả của biểu thức đó (trong trường hợp này là 10 ).

Điều này cũng đúng khi kết quả của biểu thức là NULL :

SELECT IFNULL( 2 / 0, 0 );

Chúng tôi nhận được điều này:

0.0000

Nó trả tiền để cẩn thận mặc dù. Số không là một giá trị. NULL không phải.

Trong ví dụ trên, tôi trả về 0 khi có giá trị NULL, nhưng điều này có thể gây hiểu lầm hoặc thậm chí sai hoàn toàn. Hãy tưởng tượng nếu chúng ta đang chia giá và kết quả là giá bằng không. Được rồi, nếu chúng ta đang chia giá cho 0 thì có thể có điều gì đó sai khác, nhưng tôi chắc chắn rằng bạn hiểu ý tôi.

Trong mọi trường hợp, tốt hơn là sử dụng một giá trị có ý nghĩa hơn để truyền tải cho người đọc rằng không có giá trị nào.

Ví dụ:

SELECT IFNULL( 2 / 0, 'No value' );

Kết quả:

No value

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phpMyAdmin trên MySQL 8.0

  2. ĐẶT HÀNG THEO ngày giờ TRƯỚC NHÓM THEO tên trong mysql

  3. Cách đơn giản để tính giá trị trung bình với MySQL

  4. Lưu trữ tên người dùng và mật khẩu trong cơ sở dữ liệu có an toàn không?

  5. Sắp xếp trường varchar theo số trong MySQL