sql >> Database >  >> RDS >> Mysql

MySQL IFNULL() uitgelegd

MySQL heeft een IFNULL() functie waarmee we eenvoudig NULL-waarden kunnen vervangen door een andere waarde.

Syntaxis

IFNULL(expr1,expr2)

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

Voorbeeld

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

SELECT IFNULL( null, 'n/a' );

Resultaat:

n/a

In dit geval gebruikte ik IFNULL() om de NULL-waarde te vervangen door de tekenreeks n/a .

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

SELECT IFNULL( 'Cow', 'n/a' );

Resultaat:

Cow

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

Databasevoorbeeld

Stel dat we de volgende query uitvoeren:

SELECT
    PetName,
    DOB
FROM Pets;

Resultaat:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
| Woof    | 2020-10-03 |
| Ears    | 2022-01-11 |
+---------+------------+

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

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

SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Resultaat:

+---------+--------------------------------+
| PetName | IFNULL( DOB, 'None supplied' ) |
+---------+--------------------------------+
| Fluffy  | 2020-11-20                     |
| Fetch   | 2019-08-16                     |
| Scratch | 2018-10-01                     |
| Wag     | 2020-03-15                     |
| Tweet   | 2020-11-28                     |
| Fluffy  | 2020-09-17                     |
| Bark    | None supplied                  |
| Meow    | None supplied                  |
| Woof    | 2020-10-03                     |
| Ears    | 2022-01-11                     |
+---------+--------------------------------+

Uitdrukkingen

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

SELECT IFNULL( 2 * 5, 0 );

We krijgen dit:

10

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

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

SELECT IFNULL( 2 / 0, 0 );

We krijgen dit:

0.0000

Het loont echter om voorzichtig te zijn. Nul is een waarde. NULL is niet.

In het bovenstaande voorbeeld heb ik nul geretourneerd wanneer er een NULL-waarde was, maar dit kan misleidend of zelfs helemaal verkeerd zijn. Stel je voor dat we prijzen zouden delen, en het resultaat was een prijs van nul. Oké, als we een prijs door nul delen, is er waarschijnlijk iets anders mis, maar ik weet zeker dat je mijn punt begrijpt.

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

Voorbeeld:

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

Resultaat:

No value

  1. Waarom kan ik geen bindvariabelen gebruiken in DDL/SCL-instructies in dynamische SQL?

  2. Verbinding met Db sterft na>4<24 in spring-boot jpa-slaapstand

  3. is het mogelijk om EXISTS direct als bit te selecteren?

  4. Hoe SQL-query direct in C# uit te voeren?