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()funktionCOALESCE()funktionIF()funktion kombineret medIS NULL(ellerIS NOT NULL) operatørCASEudtryk kombineret medIS NULL(ellerIS 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;