SQLite nullif()
funktion är en praktisk funktion som låter dig behandla vissa värden som NULL vid behov.
Det får inte förväxlas med ifnull()
funktion, som gör det motsatta – gör att du kan behandla NULL-värden som något annat.
nullif()
funktion accepterar två argument och returnerar sitt första argument om argumenten är olika och NULL om argumenten är desamma.
Syntax
Syntaxen ser ut så här:
nullif(X,Y)
Funktionen söker i sina argument från vänster till höger efter ett argument som definierar en sorteringsfunktion och använder den sorteringsfunktionen för alla strängjämförelser. Om inget av argumenten definierar en sammanställningsfunktion används BINÄR.
Exempel
Här är ett grundläggande exempel att visa.
SELECT
nullif(123,0),
nullif(0,0),
nullif(123,123);
Resultat:
nullif(123,0) nullif(0,0) nullif(123,123) ------------- ----------- --------------- 123
I den första kolumnen är de två värdena olika, så det första värdet returneras.
I den andra kolumnen är båda värdena desamma, så NULL returneras.
Detsamma gäller för den tredje kolumnen – båda värdena är desamma, så NULL returneras.
Ett praktiskt exempel
Här är ett databasexempel som visar en mer praktisk användning av nullif()
funktion.
Ta följande tabell som heter Produkter :
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
Vi kan se att två produkter har ett pris på noll. En annan produkt har ett NULL-pris.
Föreställ dig nu att vi vill ta reda på hur många produkter som har ett positivt pris. Med andra ord, vi vill inte inkludera produkter som har ett pris eller noll (eller NULL för den delen).
För att göra detta kan vi använda nullif()
i kombination med count()
funktion.
SELECT count(nullif(Price, 0.00))
FROM Products;
Resultat:
3
Vi får 3 som förväntat, vilket är exakt hur många rader som har ett positivt värde i Pris kolumn.
Detta fungerar eftersom count()
funktionen räknar endast icke-NULL-värden. Genom att konvertera nollbeloppen till NULL kan vi ignorera dessa värden i vår beräkning.
Här är det igen utan nullif()
funktion.
SELECT count(Price)
FROM Products;
Resultat:
5
Så i det här fallet inkluderar den nollbeloppen och vi får 5. Den ignorerar fortfarande rad 6 eftersom den faktiskt har ett NULL-värde.