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

MySQL NULLIF () Giải thích

Trong MySQL, NULLIF() là một hàm điều khiển luồng 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( 7, 7 );

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( 7, 8 );

Kết quả:

7

Các đối số khác nhau và do đó, đố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( 'Bean', 'Bean' ) AS "Same",
    NULLIF( 'Bean', 'Mushroom' ) AS "Different";

Kết quả:

Same	Different
----    ---------
NULL	Bean

Ngày

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

SELECT 
    NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
    NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";

Kết quả:

Same	Different
----    ----------
NULL	2030-12-20

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( 8, 2 * 4 );

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

NULL

2 nhân với 4 được 8 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( 8, 2 * 3 );

Kết quả:

8

Đố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 
WHERE Region = 'Southern Europe'
ORDER BY Name;

Kết quả:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Andorra                       | Andorra                        |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Malta                         | Malta                          |
| Portugal                      | Portugal                       |
| San Marino                    | San Marino                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

Ở đâ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 if Different"
FROM country 
WHERE Region = 'Southern Europe'
ORDER BY Name;

Kết quả:

+-------------------------------+--------------------------------+--------------------------------+
| Name                          | LocalName                      | Local Name if Different        |
+-------------------------------+--------------------------------+--------------------------------+
| Albania                       | Shqipëria                      | Shqipëria                      |
| Andorra                       | Andorra                        | NULL                           |
| Bosnia and Herzegovina        | Bosna i Hercegovina            | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      | NULL                           |
| Greece                        | Elláda                         | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         | Italia                         |
| Macedonia                     | Makedonija                     | Makedonija                     |
| Malta                         | Malta                          | NULL                           |
| Portugal                      | Portugal                       | NULL                           |
| San Marino                    | San Marino                     | NULL                           |
| Slovenia                      | Slovenija                      | Slovenija                      |
| Spain                         | España                         | España                         |
| Yugoslavia                    | Jugoslavija                    | Jugoslavija                    |
+-------------------------------+--------------------------------+--------------------------------+

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.

Chúng tôi cũng 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 Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;

Kết quả:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

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( 5 );

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. ADDDATE () so với DATE_ADD () trong MySQL:Sự khác biệt là gì?

  2. Xóa các thẻ HTML khỏi bản ghi

  3. Cấp quyền cho người dùng MySQL trên Linux thông qua dòng lệnh

  4. Cách bảo mật MySQL:Phần thứ hai

  5. Tính toán decile từ tần suất trong MySQL