sql >> Databasteknik >  >> RDS >> MariaDB

Hur COALESCE() fungerar i MariaDB

I MariaDB, COALESCE() operatorn returnerar det första icke-NULL-värdet i listan, eller NULL om det inte finns några icke-NULL-värden.

Syntax

Syntaxen ser ut så här:

COALESCE(value,...)

Exempel

Här är ett enkelt exempel att visa:

SELECT COALESCE(null, 'Red', 'Black');

Resultat:

Red

I det här fallet, Red var det första icke-NULL-värdet, och så COALESCE() returnerade det värdet.

Black var också icke-NULL, men det kom efter Red och därför returnerades den inte.

Databasexempel

Anta att vi kör följande fråga:

SELECT
    PetName,
    DOB AS "Date of Birth"
FROM Pets;

Och vi får följande resultat:

+---------+---------------+
| PetName | Date of Birth |
+---------+---------------+
| 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          |
+---------+---------------+

Vi kan se att de två sista raderna har NULL-värden i DOB-kolumnen.

Om vi ​​ville ersätta NULL med ett annat värde kan vi ändra frågan enligt följande:

SELECT
    PetName,
    COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;

Resultat:

+---------+---------------+
| PetName | Date of Birth |
+---------+---------------+
| 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 |
+---------+---------------+

Uttryck

COALESCE() returnerar det aktuella värdet för det första uttrycket som initialt inte evalueras till NULL . Därför, om vi skickar ett uttryck som detta:

SELECT COALESCE( null, 5 * 2 );

Vi får detta:

10

När alla värden är NULL

Om alla värden är NULL , COALESCE() returnerar NULL :

SELECT COALESCE( null, null );

Resultat:

NULL

COALESCE() kontra IFNULL()

När den används med två värden, COALESCE() fungerar på samma sätt som IFNULL :

SET @a = null, @b = 52;
SELECT 
    COALESCE(@a, @b), 
    IFNULL(@a, @b);

Resultat:

+------------------+----------------+
| COALESCE(@a, @b) | IFNULL(@a, @b) |
+------------------+----------------+
| 52               | 52             |
+------------------+----------------+

Ogiltigt antal argument

Använder COALESCE() utan några argument resulterar i ett fel:

SELECT COALESCE();

Resultat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

  1. Konfigurera SQL Server Alltid PÅ Tillgänglighetsgrupper mellan två synkrona repliker. Del 2

  2. Robolectric åtkomst till databasen ger ett fel

  3. Hur man listar alla lagrade procedurer i Oracle Database

  4. Kopiera en tabell (inklusive index) i postgres