sql >> Databáze >  >> RDS >> Mysql

MySQL COALESCE() Vysvětleno

V MySQL je to COALESCE() Operátor vrátí první hodnotu v seznamu, která není NULL, nebo NULL, pokud neexistují žádné jiné hodnoty než NULL.

Syntaxe

Syntaxe vypadá takto:

COALESCE(value,...)

Příklad

Zde je jednoduchý příklad k demonstraci:

SELECT COALESCE(null, 'Fish', 'Rabbit');

Výsledek:

Fish

V tomto případě Fish byla první hodnota bez NULL, a tak COALESCE() vrátil tuto hodnotu.

Rabbit byla také hodnota bez NULL, ale přišla za Fish a tak to nebylo vráceno.

Když jsou všechny hodnoty NULL

Pokud jsou všechny hodnoty NULL , COALESCE() vrátí NULL :

SELECT COALESCE( null, null );

Výsledek:

NULL

Výrazy

COALESCE() vrátí aktuální hodnotu prvního výrazu, který se zpočátku nevyhodnotí jako NULL . Pokud tedy předáme výraz jako tento:

SELECT COALESCE( null, 2 * 10 );

Dostáváme toto:

20

Příklad databáze

Předpokládejme, že spustíme následující dotaz:

SELECT
  PetName,
  PetType
FROM Pets;

A dostaneme následující výsledek:

PetName	PetType
------- -------
Meow	Cat
Woof	Dog
Tweet	Bird
Awk	NULL
Moo	Cow
Omph	NULL

Vidíme, že dva řádky mají ve sloupci DOB hodnoty NULL.

Pokud bychom chtěli nahradit NULL s jinou hodnotou bychom mohli dotaz změnit následovně:

SELECT
  PetName,
  COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;

Výsledek:

PetName	PetType
------- -------
Meow	Cat
Woof	Dog
Tweet	Bird
Awk	Unknown
Moo	Cow
Omph	Unknown

V tomto případě jsme nahradili všechny hodnoty NULL řetězcem Unknown .

Nemusí to však být řetězec. Zde je další příklad, který nahrazuje hodnoty NULL celým číslem:

SELECT 
  EmployeeName,
  Salary,
  COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;

Výsledek:

EmployeeName	Salary	Salary (adjusted)
--------------  ------  -----------------
Homer Einstein	NULL	0
Bart Hawking	100000	100000

Neplatný počet argumentů

Pomocí COALESCE() bez jakýchkoli argumentů vede k chybě:

SELECT COALESCE();

Výsledek:

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

  1. Maximální velikost pro dotaz SQL Server? klauzule IN? Existuje lepší přístup

  2. Exportujte konkrétní řádky z tabulky PostgreSQL jako INSERT SQL skript

  3. Seznam všech funkcí v databázi Oracle

  4. Co metoda Statement.setFetchSize(nSize) skutečně dělá v ovladači SQL Server JDBC?