sql >> Database >  >> RDS >> Mysql

4 manieren om NULL te vervangen door een andere waarde in MySQL

In MySQL wilt u soms niet dat NULL-waarden worden geretourneerd als NULL . Soms wilt u dat NULL-waarden worden geretourneerd met een andere waarde, zoals "N.v.t.", "Niet van toepassing", "Geen", of zelfs de lege tekenreeks "".

Gelukkig zijn er verschillende manieren om dit in MySQL te doen.

Hier zijn er vier:

  • De IFNULL() functie
  • De COALESCE() functie
  • De IF() functie gecombineerd met de IS NULL (of IS NOT NULL ) operator
  • De CASE uitdrukking gecombineerd met de IS NULL (of IS NOT NULL ) operator

Voorbeelden van deze opties staan ​​hieronder.

Voorbeeldgegevens

Laten we eerst wat voorbeeldgegevens pakken:

USE Solutions;
SELECT TaskCode
From Tasks;

Resultaat:

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

We hebben dus drie NULL-waarden en drie niet-NULL-waarden.

De IFNULL()-functie

Gezien de naam is dit waarschijnlijk de meest voor de hand liggende optie om NULL-waarden in MySQL te vervangen. Deze functie is in feite het equivalent van ISNULL() in SQL Server.

De IFNULL() functie kunt u twee argumenten opgeven. Het eerste argument wordt alleen geretourneerd als het niet NULL is. Als het NULL is, wordt in plaats daarvan het tweede argument geretourneerd.

Hier is een voorbeeld van het gebruik van IFNULL() vergeleken met onze voorbeeldgegevensset:

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

Resultaat:

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

Hier hebben we eenvoudigweg NULL-waarden vervangen door N/A .

De COALESCE()-functie

Deze functie is vergelijkbaar met de IFNULL() functie, maar iets anders. Deze functie voldoet aan de ANSI  SQL -standaard en wordt op grote schaal ingezet in verschillende RDBMS'en.

De manier waarop het werkt, is dat je zoveel argumenten geeft als je nodig hebt. COALESCE() retourneert dan de eerste niet-NULL waarde in de lijst, of NULL als er geen niet-NULL . zijn waarden.

Zoals dit:

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

Resultaat:

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

We krijgen dus precies hetzelfde resultaat als voorheen.

Het verschil met deze functie is echter dat je, zoals gezegd, een lijst met argumenten kunt geven. De COALESCE() functie zal de eerste niet-NULL-waarde aannemen.

We kunnen bijvoorbeeld NULL . toevoegen als het eerste argument en plaats None voor N/A en kijk wat er gebeurt:

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

Resultaat:

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

Het heeft de eerste NULL overgeslagen zoals verwacht, sloeg het alle NULL-waarden over in de TaskCode kolom, voordat u genoegen neemt met None . De N/A waarde is in dit geval niet gebruikt omdat None kwam eerst en het is een waarde die niet NULL is.

De IF()-functie gecombineerd met IS NULL/IS NOT NULL

De IS NULL en IS NOT NULL Met operators kunt u testen op NULL-waarden en een andere waarde presenteren, afhankelijk van de uitkomst.

We kunnen deze operatoren gebruiken binnen de IF() functie, zodat niet-NULL-waarden worden geretourneerd en NULL-waarden worden vervangen door een waarde naar keuze.

Voorbeeld:

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

Resultaat:

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

Dus hetzelfde resultaat als met de IFNULL() en COALESCE() functies.

En natuurlijk kunnen we IS NOT NULL swap omwisselen met IS NULL . Als we dat doen, moeten we ook de volgende argumenten omwisselen:

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

De CASE-expressie gecombineerd met IS NULL/IS NOT NULL

Een andere manier om dit te doen is door de CASE . te gebruiken uitdrukking:

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

Resultaat:

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

Net als bij het vorige voorbeeld, kan dit worden herschreven om IS NULL te gebruiken in plaats van IS NOT NULL :

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

  1. Hoe de kwetsbaarheidskloof in PostgreSQL te dichten

  2. Gebruikersaccountbeheer, rollen, machtigingen, authenticatie PHP en MySQL

  3. Time-outinstelling voor SQL Server

  4. Wat is de juiste naam voor een associatietabel (een veel-op-veel-relatie)