sql >> Databasteknik >  >> RDS >> SQLite

Hur SQLite Nullif() fungerar

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.


  1. Kan inte ansluta till MySQL-serverfel 111

  2. Migrera från MySQL Enterprise till MariaDB 10.3

  3. Oracle SQL Where-klausul för att hitta datumposter äldre än 30 dagar

  4. Hur man identifierar MySQL-prestandaproblem med långsamma frågor