sql >> Databasteknik >  >> RDS >> Mysql

4 sätt att ersätta NULL med ett annat värde i MySQL

I MySQL vill du ibland inte att NULL-värden ska returneras som NULL . Ibland vill du att NULL-värden ska returneras med ett annat värde, som "N/A", "Inte tillämpligt", "Ingen" eller till och med den tomma strängen "".

Lyckligtvis finns det flera sätt att göra detta i MySQL.

Här är fyra:

  • IFNULL() funktion
  • COALESCE() funktion
  • IF() funktion kombinerad med IS NULL (eller IS NOT NULL ) operatör
  • CASE uttryck kombinerat med IS NULL (eller IS NOT NULL ) operatör

Exempel på dessa alternativ finns nedan.

Exempeldata

Låt oss först ta några exempeldata:

USE Solutions;
SELECT TaskCode
From Tasks;

Resultat:

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

Så vi har tre NULL-värden och tre icke-NULL-värden.

IFNULL()-funktionen

Med tanke på dess namn är detta förmodligen det mest uppenbara alternativet för att ersätta NULL-värden i MySQL. Denna funktion är i princip motsvarigheten till ISNULL() i SQL Server.

IFNULL() funktionen låter dig ange två argument. Det första argumentet returneras endast om det inte är NULL. Om det är NULL, returneras det andra argumentet istället.

Här är ett exempel på hur du använder IFNULL() mot vår exempeldatauppsättning:

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

Resultat:

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

Här ersatte vi helt enkelt NULL-värden med N/A .

COALESCE()-funktionen

Denna funktion liknar IFNULL() funktion, men något annorlunda. Den här funktionen följer ANSI  SQL standarden och den är allmänt distribuerad över olika RDBMS:er .

Så det fungerar är att du ger så många argument som du behöver. COALESCE() kommer då att returnera den första icke-NULL värde i listan, eller NULL om det inte finns några icke-NULL värden.

Så här:

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

Resultat:

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

Så vi får exakt samma resultat som tidigare.

Skillnaden med den här funktionen är dock att du som nämnt kan tillhandahålla en lista med argument. COALESCE() funktionen tar det som är det första icke-NULL-värdet.

Så till exempel kan vi lägga till NULL som första argument och placera None före N/A och se vad som händer:

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

Resultat:

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

Den hoppade över den första NULL som förväntat hoppade den över alla NULL-värden i TaskCode kolumn innan du väljer None . N/A värde användes inte i det här fallet eftersom None kom först och det är ett icke-NULL-värde.

IF()-funktionen kombinerad med IS NULL/IS NOT NULL

IS NULL och IS NOT NULL operatorer låter dig testa för NULL-värden och presentera ett annat värde beroende på resultatet.

Vi kan använda dessa operatorer i IF() funktion, så att icke-NULL-värden returneras, och NULL-värden ersätts med ett värde som vi väljer.

Exempel:

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å samma resultat som med IFNULL() och COALESCE() funktioner.

Och naturligtvis kan vi byta IS NOT NULL med IS NULL . Om vi ​​gör det, skulle vi behöva byta ut de efterföljande argumenten också:

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

CASE-uttrycket kombinerat med IS NULL/IS NOT NULL

Ett annat sätt att göra det är att använda CASE uttryck:

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 föregående exempel kan detta skrivas om till att använda IS NULL istället för IS NOT NULL :

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

  1. Hur man får de senaste 15 dagarna i MySQL

  2. MySql Error 150 - Främmande nycklar

  3. Omöjligt att installera PG gem på min mac med Mavericks

  4. Förstå MySQL TRUNCATE TABLE genom praktiska exempel