SQLite nullif()
function là một chức năng tiện dụng cho phép bạn coi các giá trị nhất định là NULL khi được yêu cầu.
Không nên nhầm lẫn với ifnull()
hàm làm ngược lại - cho phép bạn coi các giá trị NULL như một thứ khác.
nullif()
hàm chấp nhận hai đối số và trả về đối số đầu tiên của nó nếu các đối số khác nhau và NULL nếu các đối số giống nhau.
Cú pháp
Cú pháp như sau:
nullif(X,Y)
Hàm tìm kiếm các đối số của nó từ trái sang phải để tìm đối số xác định một hàm đối chiếu và sử dụng hàm đối chiếu đó cho tất cả các so sánh chuỗi. Nếu không có đối số nào xác định hàm đối chiếu thì BINARY được sử dụng.
Ví dụ
Đây là một ví dụ cơ bản để chứng minh.
SELECT
nullif(123,0),
nullif(0,0),
nullif(123,123);
Kết quả:
nullif(123,0) nullif(0,0) nullif(123,123) ------------- ----------- --------------- 123
Trong cột đầu tiên, hai giá trị khác nhau, vì vậy giá trị đầu tiên được trả về.
Trong cột thứ hai, cả hai giá trị đều giống nhau, vì vậy NULL được trả về.
Điều này cũng đúng đối với cột thứ ba - cả hai giá trị đều giống nhau, vì vậy NULL được trả về.
Một ví dụ thực tế
Dưới đây là ví dụ về cơ sở dữ liệu chứng minh cách sử dụng thiết thực hơn cho nullif()
chức năng.
Lấy bảng sau được gọi là Sản phẩm :
ProductId ProductName Price ---------- ------------- ---------- 1 Widget Holder 139.5 2 Widget Stick 89.75 3 Foo Cap 11.99 4 Free Widget 0.0 5 Free Foobar 0.0 6 Free Beer
Chúng ta có thể thấy rằng hai sản phẩm có giá bằng không. Một sản phẩm khác có giá ĐẦY ĐỦ.
Bây giờ, hãy tưởng tượng chúng ta muốn tìm xem có bao nhiêu sản phẩm có giá dương. Nói cách khác, chúng tôi không muốn đưa vào các sản phẩm có giá hoặc bằng 0 (hoặc KHÔNG ĐỦ cho vấn đề đó).
Để làm điều này, chúng ta có thể sử dụng nullif()
kết hợp với count()
chức năng.
SELECT count(nullif(Price, 0.00))
FROM Products;
Kết quả:
3
Chúng tôi nhận được 3 như mong đợi, đó là chính xác số lượng hàng có giá trị dương trong Giá cột.
Điều này hoạt động vì count()
hàm chỉ đếm các giá trị không phải NULL. Bằng cách chuyển đổi số 0 thành NULL, chúng tôi có thể bỏ qua những giá trị đó trong tính toán của mình.
Đây lại là nó mà không có nullif()
chức năng.
SELECT count(Price)
FROM Products;
Kết quả:
5
Vì vậy, trong trường hợp này, nó bao gồm số tiền bằng 0 và chúng ta nhận được 5. Nó vẫn bỏ qua hàng 6 vì hàng đó thực sự có giá trị NULL.