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

4 måder at erstatte NULL med en anden værdi i MySQL

I MySQL ønsker du nogle gange ikke, at NULL-værdier skal returneres som NULL . Nogle gange ønsker du, at NULL-værdier skal returneres med en anden værdi, såsom "N/A", "Ikke relevant", "Ingen" eller endda den tomme streng "".

Heldigvis er der flere måder at gøre dette på i MySQL.

Her er fire:

  • IFNULL() funktion
  • COALESCE() funktion
  • IF() funktion kombineret med IS NULL (eller IS NOT NULL ) operatør
  • CASE udtryk kombineret med IS NULL (eller IS NOT NULL ) operatør

Eksempler på disse muligheder er nedenfor.

Eksempel på data

Lad os først tage nogle eksempeldata:

USE Solutions;
SELECT TaskCode
From Tasks;

Resultat:

+----------+
| TaskCode |
+----------+
| gar123   |
| NULL     |
| NULL     |
| dog456   |
| NULL     |
| cat789   |
+----------+

Så vi har tre NULL-værdier og tre ikke-NULL-værdier.

IFNULL()-funktionen

I betragtning af dets navn er dette sandsynligvis den mest oplagte mulighed for at erstatte NULL-værdier i MySQL. Denne funktion svarer grundlæggende til ISNULL() i SQL Server.

IFNULL() funktionen giver dig mulighed for at angive to argumenter. Det første argument returneres kun, hvis det ikke er NULL. Hvis det er NULL, returneres det andet argument i stedet.

Her er et eksempel på brug af IFNULL() mod vores eksempeldatasæt:

SELECT IFNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Resultat:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Her erstattede vi simpelthen NULL-værdier med N/A .

COALESCE()-funktionen

Denne funktion ligner IFNULL() funktion, men lidt anderledes. Denne funktion overholder ANSI  SQL-standarden, og den er udbredt på tværs af forskellige RDBMS'er.

Den måde, det fungerer på, er, at du giver så mange argumenter, som du har brug for. COALESCE() vil derefter returnere den første ikke-NULL værdi på listen, eller NULL hvis der ikke er nogen ikke-NULL værdier.

Sådan:

SELECT COALESCE(TaskCode, 'N/A') AS Result 
FROM Tasks;

Resultat:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Så vi får præcis det samme resultat som tidligere.

Forskellen med denne funktion er dog, at du som nævnt kan give en liste med argumenter. COALESCE() funktion vil tage den første værdi, der ikke er NULL.

Så for eksempel kunne vi tilføje NULL som det første argument og placer None før N/A og se, hvad der sker:

SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result 
FROM Tasks;

Resultat:

+--------+
| Result |
+--------+
| gar123 |
| None   |
| None   |
| dog456 |
| None   |
| cat789 |
+--------+

Den sprang den første NULL over som forventet, sprang den alle NULL-værdier over i TaskCode kolonne, før du vælger None . N/A værdi blev ikke brugt i dette tilfælde, fordi None kom først, og det er en ikke-NULL-værdi.

HVIS()-funktionen kombineret med ER NULL/ER IKKE NULL

IS NULL og IS NOT NULL operatorer giver dig mulighed for at teste for NULL-værdier og præsentere en anden værdi afhængigt af resultatet.

Vi kan bruge disse operatorer i IF() funktion, så ikke-NULL-værdier returneres, og NULL-værdier erstattes med en værdi efter eget valg.

Eksempel:

SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result 
FROM Tasks;

Resultat:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Så det samme resultat som med IFNULL() og COALESCE() funktioner.

Og selvfølgelig kunne vi bytte IS NOT NULL med IS NULL . Hvis vi gør det, skal vi også bytte de efterfølgende argumenter:

SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result 
FROM Tasks;

CASE-udtrykket kombineret med ER NULL/ER IKKE NULL

En anden måde at gøre det på er at bruge CASE udtryk:

SELECT 
    CASE 
        WHEN TaskCode IS NOT NULL THEN TaskCode 
        ELSE 'N/A' 
    END AS Result
FROM Tasks;

Resultat:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Som med det foregående eksempel kunne dette omskrives til at bruge IS NULL i stedet for IS NOT NULL :

SELECT 
    CASE 
        WHEN TaskCode IS NULL THEN 'N/A' 
        ELSE TaskCode 
    END AS Result
FROM Tasks;

  1. forskel mellem forklar plan og udførelsesplan

  2. Sådan bruger du skabeloner i SQL Server Management Studio (SSMS) - SQL Server / TSQL Tutorial Del 16

  3. PLS-00103:Stødte på symbolet CREATE

  4. Kunne ikke finde den lagrede procedure 'dbo.aspnet_CheckSchemaVersion'