sql >> Databasteknik >  >> RDS >> Mysql

MySQL COALESCE() Förklarat

I MySQL, 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, 'Fish', 'Rabbit');

Resultat:

Fish

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

Rabbit var också ett icke-NULL-värde, men det kom efter Fish och därför returnerades den inte.

När alla värden är NULL

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

SELECT COALESCE( null, null );

Resultat:

NULL

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, 2 * 10 );

Vi får detta:

20

Databasexempel

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

SELECT
  PetName,
  PetType
FROM Pets;

Och vi får följande resultat:

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

Vi kan se att två rader 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(PetType, 'Unknown') AS "PetType"
FROM Pets;

Resultat:

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

I det här fallet ersatte vi alla NULL-värden med strängen Unknown .

Det behöver dock inte vara ett snöre. Här är ett annat exempel som ersätter NULL-värden med ett heltal:

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

Resultat:

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

Ogiltigt antal argument

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

SELECT COALESCE();

Resultat:

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. Hur SQLite Char() fungerar

  2. PostgreSQL strömmande replikering - en djupdykning

  3. Vad är den maximala längden på ett tabellnamn i Oracle?

  4. Vilka färdigheter och kunskaper behöver databasdesigners?