SQLite nullif()
function to przydatna funkcja, która w razie potrzeby pozwala traktować pewne wartości jako NULL.
Nie należy go mylić z ifnull()
funkcja, która działa odwrotnie – pozwala traktować wartości NULL jako coś innego.
nullif()
funkcja przyjmuje dwa argumenty i zwraca swój pierwszy argument, jeśli argumenty są różne i NULL, jeśli argumenty są takie same.
Składnia
Składnia wygląda tak:
nullif(X,Y)
Funkcja przeszukuje swoje argumenty od lewej do prawej w poszukiwaniu argumentu, który definiuje funkcję porównywania i używa tej funkcji porównywania do wszystkich porównań ciągów. Jeśli żaden argument nie definiuje funkcji zestawiania, używany jest BINARNY.
Przykład
Oto podstawowy przykład do zademonstrowania.
SELECT
nullif(123,0),
nullif(0,0),
nullif(123,123);
Wynik:
nullif(123,0) nullif(0,0) nullif(123,123) ------------- ----------- --------------- 123
W pierwszej kolumnie te dwie wartości są różne, więc zwracana jest pierwsza wartość.
W drugiej kolumnie obie wartości są takie same, więc zwracane jest NULL.
To samo dotyczy trzeciej kolumny – obie wartości są takie same, więc zwracana jest wartość NULL.
Praktyczny przykład
Oto przykład bazy danych, który demonstruje bardziej praktyczne zastosowanie nullif()
funkcja.
Weź poniższą tabelę o nazwie Produkty :
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
Widzimy, że dwa produkty mają cenę zerową. Inny produkt ma cenę NULL.
Teraz wyobraź sobie, że chcemy dowiedzieć się, ile produktów ma pozytywną cenę. Innymi słowy, nie chcemy uwzględniać produktów, które mają cenę lub zero (lub NULL w tym przypadku).
Aby to zrobić, możemy użyć nullif()
w połączeniu z count()
funkcja.
SELECT count(nullif(Price, 0.00))
FROM Products;
Wynik:
3
Otrzymujemy 3 zgodnie z oczekiwaniami, czyli dokładnie ile wierszy ma wartość dodatnią w Cenie kolumna.
Działa to, ponieważ count()
funkcja zlicza tylko wartości inne niż NULL. Konwertując kwoty zerowe na NULL, jesteśmy w stanie zignorować te wartości w naszych obliczeniach.
Tutaj znowu bez nullif()
funkcja.
SELECT count(Price)
FROM Products;
Wynik:
5
Tak więc w tym przypadku zawiera kwoty zerowe i otrzymujemy 5. Nadal ignoruje wiersz 6, ponieważ w rzeczywistości ma on wartość NULL.