sql >> Database >  >> RDS >> MariaDB

Hoe NVL() werkt in MariaDB

Van MariaDB 10.3, NVL() kan worden gebruikt als een alias voor de IFNULL() functie. Daarom stellen beide functies ons in staat om NULL-waarden te vervangen door een andere waarde.

Syntaxis

NVL(expr1,expr2)

Als expr1 is niet NULL , NVL() retourneert expr1 ; anders retourneert het expr2 .

Gegeven NVL() is een alias voor IFNULL() , kunnen we ook de volgende syntaxis gebruiken:

IFNULL(expr1,expr2)

Beide bovenstaande syntaxis geven hetzelfde resultaat.

Voorbeeld

Hier is een eenvoudig voorbeeld dat de NULL . gebruikt constante:

SELECT NVL( null, 'No Value' );

Resultaat:

No Value

In dit geval gebruikte ik NVL() om de NULL-waarde te vervangen door No Value .

Dit is wat er gebeurt als het eerste argument niet NULL is :

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

Resultaat:

Green

In dit geval wordt het eerste argument geretourneerd, omdat het niet NULL . is .

Databasevoorbeeld

Stel dat we de volgende query uitvoeren:

SELECT * FROM Employees;

Resultaat:

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

We kunnen zien dat twee rijen NULL-waarden hebben in de dept kolom.

In de volgende query gebruiken we NVL() om de NULL-waarden te vervangen door een meer betekenisvolle waarde voor de lezer:

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

Resultaat:

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

Uitdrukkingen

De huidige waarde van het eerste argument wordt geëvalueerd. Daarom, als we een uitdrukking als de volgende leveren:

SELECT NVL( 4 * 10, 0 );

We krijgen dit:

40

We krijgen dus niet de 4 * 10 deel. We krijgen het resultaat van die uitdrukking (in dit geval 40 ).

Hetzelfde geldt wanneer het resultaat van de expressie NULL . is :

SELECT NVL( 4 / 0, 0 );

Resultaat:

0.0000

Dit is echter een gevaarlijk voorbeeld. Nul is een waarde. NULL is niet.

Het retourneren van nul wanneer er een NULL-waarde is, kan misleidend of zelfs helemaal verkeerd zijn. Stel je voor dat we te maken hadden met prijzen. We kunnen eindigen met een prijs van nul, wat onjuist kan zijn en het bedrijf veel geld kan kosten.

In dergelijke gevallen is het meestal beter om een ​​betekenisvollere waarde te gebruiken die de lezer duidelijk maakt dat er geen waarde is.

Voorbeeld:

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

Resultaat:

No Value

De IFNULL() Functie

Zoals vermeld, NVL() is een alias voor IFNULL() . Daarom kunnen we NVL() . vervangen met IFNULL() in een van de bovenstaande voorbeelden.

Voorbeeld:

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

Resultaat:

No Value

  1. Hoe MySQL-replicatie in te stellen in RHEL, Rocky en AlmaLinux

  2. Getallen opmaken in wetenschappelijke notatie in Oracle

  3. Afronden (OMHOOG/OMLAAG) in SQL Server – 5 handige tips

  4. Oracle-aliasing begrijpen - waarom wordt een alias niet herkend in een query, tenzij verpakt in een tweede query?