sql >> Databasteknik >  >> RDS >> Mysql

MySQL IFNULL() Förklarat

MySQL har en IFNULL() funktion som gör att vi enkelt kan 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 .

Exempel

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

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

Resultat:

n/a

I det här fallet använde jag IFNULL() för att ersätta NULL-värdet med strängen n/a .

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

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

Resultat:

Cow

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
    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 att två rader har NULL-värden i DOB-kolumnen.

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

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( 2 * 5, 0 );

Vi får detta:

10

Så vi får inte 2 * 5 del. Vi får resultatet av det uttrycket (som i det här fallet är 10 ).

Detsamma gäller när resultatet av uttrycket är NULL :

SELECT IFNULL( 2 / 0, 0 );

Vi får detta:

0.0000

Det lönar sig dock att vara försiktig. Noll är ett värde. NULL är inte.

I exemplet ovan returnerade jag noll när det fanns ett NULL-värde, men detta kan vara missvisande eller till och med helt fel. Tänk om vi skulle dela priserna och resultatet blev ett pris på noll. OK, om vi dividerar ett pris med noll är det förmodligen något annat fel, men jag är säker på att du förstår min poäng.

Hur som helst är det 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( 2 / 0, 'No value' );

Resultat:

No value

  1. Pivotera, avpivotera och dela kolumner i Power BI Query Editor

  2. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer

  3. Hur man ställer in standardspråket för alla nya inloggningar i SQL Server (T-SQL)

  4. Mätning av frågeprestanda:Exekveringsplan för frågekostnad kontra tid