sql >> Database teknologi >  >> RDS >> Mysql

MySQL IFNULL() Forklaret

MySQL har en IFNULL() funktion, der giver os mulighed for nemt at erstatte NULL-værdier med en anden værdi.

Syntaks

IFNULL(expr1,expr2)

Hvis expr1 er ikke NULL , IFNULL() returnerer expr1 ; ellers returnerer den expr2 .

Eksempel

Her er et grundlæggende eksempel, der bruger NULL konstant:

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

Resultat:

n/a

I dette tilfælde brugte jeg IFNULL() for at erstatte NULL-værdien med strengen n/a .

Her er, hvad der sker, når det første argument ikke er NULL :

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

Resultat:

Cow

I dette tilfælde returneres det første argument, fordi det ikke er NULL .

Databaseeksempel

Antag, at vi kører følgende forespørgsel:

SELECT
    PetName,
    DOB
FROM Pets;

Resultat:

+---------+------------+
| 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 |
+---------+------------+

Vi kan se, at to rækker har NULL-værdier i DOB-kolonnen.

I den følgende forespørgsel bruger vi IFNULL() for at erstatte NULL-værdierne med en mere meningsfuld værdi for læseren:

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

Resultat:

+---------+--------------------------------+
| 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                     |
+---------+--------------------------------+

Udtryk

Den aktuelle værdi af det første argument evalueres. Derfor, hvis vi giver et udtryk som følgende:

SELECT IFNULL( 2 * 5, 0 );

Vi får dette:

10

Så vi får ikke 2 * 5 en del. Vi får resultatet af det udtryk (som i dette tilfælde er 10 ).

Det samme gælder, når resultatet af udtrykket er NULL :

SELECT IFNULL( 2 / 0, 0 );

Vi får dette:

0.0000

Det betaler sig dog at være forsigtig. Nul er en værdi. NULL er ikke.

I ovenstående eksempel returnerede jeg nul, når der var en NULL-værdi, men dette kunne være vildledende eller endda helt forkert. Tænk, hvis vi deler priserne, og resultatet var en pris på nul. OK, hvis vi dividerer en pris med nul, er der sandsynligvis noget andet galt, men jeg er sikker på, du forstår min pointe.

Under alle omstændigheder er det normalt bedre at bruge en mere meningsfuld værdi, der formidler til læseren, at der ikke er nogen værdi.

Eksempel:

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

Resultat:

No value

  1. Beregning af InnoDB-bufferpoolstørrelse til din MySQL-server

  2. Sådan repareres MySQL-databaser og tabeller

  3. Opdel en streng og gå gennem værdier i MySql Procedure

  4. MySQL-visninger