Từ MariaDB 10.3, NVL()
có thể được sử dụng làm bí danh cho IFNULL()
hàm số. Do đó, cả hai hàm đều cho phép chúng tôi thay thế các giá trị NULL bằng một giá trị khác.
Cú pháp
NVL(expr1,expr2)
Nếu expr1
không phải là NULL
, NVL()
trả về expr1
; nếu không nó trả về expr2
.
Đã cho NVL()
là bí danh cho IFNULL()
, chúng ta cũng có thể sử dụng cú pháp sau:
IFNULL(expr1,expr2)
Cả hai cú pháp trên đều trả về cùng một kết quả.
Ví dụ
Đây là một ví dụ cơ bản sử dụng NULL
hằng số:
SELECT NVL( null, 'No Value' );
Kết quả:
No Value
Trong trường hợp này, tôi đã sử dụng NVL()
để thay thế giá trị NULL bằng No Value
.
Đây là những gì sẽ xảy ra khi đối số đầu tiên không phải là NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Kết quả:
Green
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 * FROM Employees;
Kết quả:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Chúng ta có thể thấy rằng hai hàng có giá trị NULL trong dept
cột.
Trong truy vấn sau, chúng tôi sử dụng NVL()
để thay thế các giá trị NULL bằng một giá trị có ý nghĩa hơn cho người đọc:
SELECT
empId,
name,
NVL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Kết quả:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
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 NVL( 4 * 10, 0 );
Chúng tôi nhận được điều này:
40
Vì vậy, chúng tôi không nhận được 4 * 10
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à 40
).
Điều này cũng đúng khi kết quả của biểu thức là NULL
:
SELECT NVL( 4 / 0, 0 );
Kết quả:
0.0000
Tuy nhiên, đây là một ví dụ nguy hiểm. Số không là một giá trị. NULL
không phải.
Trả về 0 khi có giá trị NULL 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 đối phó với giá cả. Cuối cùng chúng ta có thể nhận được một mức giá bằng 0, điều này có thể không chính xác và khiến doanh nghiệp tốn rất nhiều tiền.
Trong những trường hợp như vậy, tốt hơn là nên 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 NVL( 4 / 0, 'No value' );
Kết quả:
No Value
IFNULL()
Chức năng
Như đã đề cập, NVL()
là bí danh cho IFNULL()
. Do đó, chúng ta có thể thay thế NVL()
với IFNULL()
trong bất kỳ ví dụ nào ở trên.
Ví dụ:
SELECT IFNULL( 4 / 0, 'No value' );
Kết quả:
No Value