I Oracle Database, COALESCE()
funktion returnerar det första icke-null-uttrycket i uttryckslistan.
Syntax
Syntaxen ser ut så här:
COALESCE(expr [, expr ]...)
Minst två uttryck måste godkännas.
Exempel
Här är ett exempel att visa:
SELECT COALESCE(null, 7)
FROM DUAL;
Resultat:
7
Här är några fler exempel:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Resultat:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Vi kan se att COALESCE()
returnerar null
när alla argument är null.
Angående den första raden SET NULL 'null';
, jag lade till det så att min SQLcl-session returnerar null
när resultatet är null.
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Databasexempel
Anta att vi kör följande fråga:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultat:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Vi kan se att flera av raderna är null
i STATE_PROVINCE
kolumn.
Här är frågan igen, förutom den här gången använder vi COALESCE()
mot STATE_PROVINCE
kolumn:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultat:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Så vi använde COALESCE()
för att returnera N/A
närhelst ett nollvärde inträffade.
COALESCE()
kontra CASE
Följande:
COALESCE(expr1, expr2)
Motsvarar detta:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Ogiltigt antal argument
Att anropa funktionen utan att skicka några argument resulterar i ett fel:
SELECT COALESCE()
FROM DUAL;
Resultat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"