sql >> Databasteknik >  >> RDS >> MariaDB

Hur IFNULL() fungerar i MariaDB

I MariaDB, IFNULL() funktion låter oss ersätta NULL-värden med ett annat värde.

Syntax

IFNULL(expr1,expr2)

Om expr1 är inte NULL , IFNULL() returnerar expr1 ; annars returnerar den expr2 .

Dessutom, från MariaDB 10.3, NVL() kan användas som ett alias för IFNULL() fungera. Därför har vi möjlighet att använda följande syntax istället:

NVL(expr1,expr2)

Resultatet är detsamma oavsett vilken syntax som används.

Exempel

Här är ett grundläggande exempel som använder NULL konstant:

SELECT IFNULL( null, 'No Value' );

Resultat:

No Value

I det här fallet använde jag IFNULL() för att ersätta NULL-värdet med No Value .

Här är vad som händer när det första argumentet inte är NULL :

SELECT IFNULL( 'Spicy', 'No Value' );

Resultat:

Spicy

I det här fallet returneras det första argumentet, eftersom det inte är NULL .

Databasexempel

Anta att vi kör följande fråga:

SELECT * FROM Employees;

Resultat:

empId	name	dept
-----   -----   -----
1	Jess	Sales
2	Rohit	NULL
3	Zohan	Sales
4	Homer	NULL

Vi kan se att två rader har NULL-värden i dept kolumn.

I följande fråga använder vi IFNULL() för att ersätta NULL-värdena med ett mer meningsfullt värde för läsaren:

SELECT
    empId,
    name,
    IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;

Resultat:

empId	name	dept
-----   -----   ----------------
1	Jess	Sales
2	Rohit	Not yet assigned
3	Zohan	Sales
4	Homer	Not yet assigned

Uttryck

Det aktuella värdet på det första argumentet utvärderas. Därför, om vi tillhandahåller ett uttryck som följande:

SELECT IFNULL( 3 * 7, 0 );

Vi får det här:

21

Så vi får inte 3 * 7 del. Vi får resultatet av det uttrycket (som i det här fallet är 21 ).

Detsamma gäller när resultatet av uttrycket är NULL . Till exempel, om vi kör följande kod:

SELECT IFNULL( 3 / 0, 0 );

Vi får det här:

0.0000

Detta är dock ett farligt exempel. Noll är ett värde. NULL är inte.

Att returnera noll när det finns ett NULL-värde kan vara missvisande eller till och med helt fel. Tänk om vi hade att göra med priser. Vi kan sluta med ett pris på noll, vilket kan vara felaktigt och kosta verksamheten mycket pengar.

Därför är det i sådana fall vanligtvis bättre att använda ett mer meningsfullt värde som förmedlar till läsaren att det inte finns något värde.

Exempel:

SELECT IFNULL( 3 / 0, 'No value' );

Resultat:

No Value

NVL() Funktion

Börjar med MariaDB 10.3, NVL() är ett alias för IFNULL() . Därför kan vi ersätta IFNULL() med NVL() i något av exemplen ovan.

Exempel:

SELECT NVL( 3 / 0, 'No value' );

Resultat:

No Value

  1. Sparse Columns i SQL Server:Inverkan på tid och rum

  2. Hur man skyddar en JDBC-applikation mot SQL-injektion

  3. Oracle JDBC:ogiltigt användarnamn/lösenord (ora-01017)

  4. Beräkna decil i MySQL baserat på totaler