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

MariaDB NULLIF () Giải thích

Trong MariaDB, NULLIF() hàm trả về NULL nếu cả hai đối số của nó là tương đương. Nếu không, nó trả về đối số đầu tiên.

Cú pháp

Cú pháp như sau:

NULLIF(expr1,expr2)

Ví dụ

Dưới đây là một ví dụ để chứng minh:

SELECT NULLIF( 5, 5 );

Kết quả:

NULL

Trong trường hợp này, cả hai đối số đều giống hệt nhau và do đó kết quả là NULL .

Khi các đối số không tương đương

Đây là những gì sẽ xảy ra khi các đối số không tương đương:

SELECT NULLIF( 5, 3 );

Kết quả:

5

Trong trường hợp này, đối số đầu tiên được trả về.

Chuỗi

Dưới đây là một ví dụ so sánh các chuỗi:

SELECT 
    NULLIF( 'Papaya', 'Papaya' ) AS "Same",
    NULLIF( 'Papaya', 'Salad' ) AS "Different";

Kết quả:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Papaya    |
+------+-----------+

Ngày

Dưới đây là một ví dụ so sánh các ngày:

SELECT 
    NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
    NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";

Kết quả:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2000-10-30 |
+------+------------+

Biểu thức

NULLIF() đánh giá giá trị hiện tại của các biểu thức. Do đó, nếu chúng ta truyền một biểu thức như sau:

SELECT NULLIF( 10, 2 * 5 );

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

NULL

2 nhân với 5 được 10 và do đó hai đối số là tương đương.

Đây là những gì sẽ xảy ra nếu chúng ta thay đổi đối số thứ hai:

SELECT NULLIF( 10, 3 * 5 );

Kết quả:

10

Đối số đầu tiên được trả về.

Một ví dụ về cơ sở dữ liệu

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

SELECT 
    Name,
    LocalName
FROM country 
ORDER BY Name ASC
LIMIT 10;

Kết quả:

+---------------------+-----------------------+
| Name                | LocalName             |
+---------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan |
| Albania             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         |
| Andorra             | Andorra               |
| Angola              | Angola                |
| Anguilla            | Anguilla              |
| Antarctica          | –                     |
| Antigua and Barbuda | Antigua and Barbuda   |
| Argentina           | Argentina             |
+---------------------+-----------------------+

Ở đây, chúng ta có tên quốc gia ở cột bên trái và tên địa phương của quốc gia tương ứng ở bên phải.

Hãy thêm NULLIF() đến cột thứ ba trong truy vấn của chúng tôi:

SELECT 
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name Different"
FROM country 
ORDER BY Name ASC
LIMIT 10;

Kết quả:

+---------------------+-----------------------+-----------------------+
| Name                | LocalName             | Local Name Different  |
+---------------------+-----------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan | Afganistan/Afqanestan |
| Albania             | Shqipëria             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         | Amerika Samoa         |
| Andorra             | Andorra               | NULL                  |
| Angola              | Angola                | NULL                  |
| Anguilla            | Anguilla              | NULL                  |
| Antarctica          | –                     | –                     |
| Antigua and Barbuda | Antigua and Barbuda   | NULL                  |
| Argentina           | Argentina             | NULL                  |
+---------------------+-----------------------+-----------------------+

Chúng ta có thể thấy rằng cột thứ ba chỉ trả về tên cục bộ nếu nó khác với giá trị trong Name cột. Nếu nó giống nhau thì NULL được trả lại.

Ngoài ra, chúng ta có thể sử dụng NULLIF() để lọc kết quả truy vấn của chúng tôi:

SELECT 
    Name,
    LocalName
FROM country 
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;

Kết quả:

+----------------+-----------------------+
| Name           | LocalName             |
+----------------+-----------------------+
| Afghanistan    | Afganistan/Afqanestan |
| Albania        | Shqipëria             |
| Algeria        | Al-Jaza’ir/Algérie    |
| American Samoa | Amerika Samoa         |
| Antarctica     | –                     |
| Armenia        | Hajastan              |
| Austria        | Österreich            |
| Azerbaijan     | Azärbaycan            |
| Bahamas        | The Bahamas           |
| Bahrain        | Al-Bahrayn            |
+----------------+-----------------------+

Trong trường hợp này, chúng tôi chỉ trả về những hàng có tên cục bộ khác với Name cột.

NULLIF() so với CASE

Đoạn mã sau:

NULLIF(expr1,expr2)

tương đương với CASE sau biểu thức:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Đếm tham số không chính xác

Truyền sai số đối số, dẫn đến lỗi:

SELECT NULLIF( 10 );

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng quan về MariaDB Xpand (trước đây là ClustrixDB)

  2. MariaDB GROUP_CONCAT ()

  3. Cách ASCII () hoạt động trong MariaDB

  4. Cách triển khai MySQL hoặc MariaDB Galera Cluster sẵn sàng sản xuất bằng ClusterControl

  5. Hướng dẫn triển khai cơ sở dữ liệu đám mây tự động