SQLite nullif()
функцията е удобна функция, която ви позволява да третирате определени стойности като NULL, когато е необходимо.
Не бива да се бърка с ifnull()
функция, която прави обратното – ви позволява да третирате стойностите NULL като нещо друго.
nullif()
функцията приема два аргумента и връща първия си аргумент, ако аргументите са различни, и NULL, ако аргументите са еднакви.
Синтаксис
Синтаксисът е така:
nullif(X,Y)
Функцията търси аргументите си отляво надясно за аргумент, който дефинира функция за съпоставяне и използва тази функция за съпоставяне за всички сравнения на низове. Ако нито един от аргументите не дефинира функция за сортиране, тогава се използва BINARY.
Пример
Ето основен пример за демонстрация.
SELECT
nullif(123,0),
nullif(0,0),
nullif(123,123);
Резултат:
nullif(123,0) nullif(0,0) nullif(123,123) ------------- ----------- --------------- 123
В първата колона двете стойности са различни, така че се връща първата стойност.
Във втората колона и двете стойности са еднакви, така че се връща NULL.
Същото важи и за третата колона – и двете стойности са еднакви, така че се връща NULL.
Практически пример
Ето пример за база данни, който демонстрира по-практично използване на nullif()
функция.
Вземете следната таблица, наречена Продукти :
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
Виждаме, че два продукта имат цена нула. Друг продукт има цена NULL.
Сега си представете, че искаме да разберем колко продукта имат положителна цена. С други думи, не искаме да включваме продукти, които имат цена или нула (или NULL в този смисъл).
За да направим това, можем да използваме nullif()
във връзка с count()
функция.
SELECT count(nullif(Price, 0.00))
FROM Products;
Резултат:
3
Получаваме 3, както се очаква, което е точно колко реда имат положителна стойност в Цената колона.
Това работи, защото count()
функцията отчита само стойности, различни от NULL. Преобразувайки нулевите суми в NULL, можем да игнорираме тези стойности в нашето изчисление.
Ето го отново без nullif()
функция.
SELECT count(Price)
FROM Products;
Резултат:
5
Така че в този случай той включва нулевите суми и получаваме 5. Той все още игнорира ред 6, защото той всъщност има стойност NULL.