sql >> Databáze >  >> RDS >> Oracle

Funkce COALESCE() v Oracle

V databázi Oracle je to COALESCE() funkce vrací první nenulový výraz ze seznamu výrazů.

Syntaxe

Syntaxe vypadá takto:

COALESCE(expr [, expr ]...) 

Musí být předány alespoň dva výrazy.

Příklad

Zde je příklad k demonstraci:

SELECT COALESCE(null, 7)
FROM DUAL; 

Výsledek:

7

Zde je několik dalších příkladů:

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; 

Výsledek:

 r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null 

Vidíme, že COALESCE() vrátí null když jsou všechny argumenty null.

Ohledně prvního řádku SET NULL 'null'; , přidal jsem to, aby moje relace SQLcl vrátila null vždy, když je výsledek nulový.

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Příklad databáze

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

SET NULL 'null';
SELECT 
    LOCATION_ID,
    STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; 

Výsledek:

 LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Prefektura Tokio 1300 null 1400 Texas 1500 Kalifornie 

Vidíme, že několik řádků je null v STATE_PROVINCE sloupec.

Zde je dotaz znovu, ale tentokrát používáme COALESCE() proti STATE_PROVINCE sloupec:

SELECT 
    LOCATION_ID,
    COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; 

Výsledek:

 COALESCE LOCATION_ID (STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1100 N/A 100 N/A prefekt Kalifornie 1200 N/A 1200 N/A prefekta 1200 

Použili jsme tedy COALESCE() vrátíte N/A kdykoli dojde k hodnotě null.

COALESCE() vs CASE

Následující:

COALESCE(expr1, expr2) 

Je ekvivalentní tomuto:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END 

Neplatný počet argumentů

Volání funkce bez předání jakýchkoli argumentů má za následek chybu:

SELECT COALESCE()
FROM DUAL; 

Výsledek:

Chyba SQL:ORA-00938:nedostatek argumentů pro funkci00938. 00000 - "nedostatek argumentů pro funkci"

  1. Primární klíč pro zpracování Android Realm v relačním objektu

  2. psql:FATAL:role postgres neexistuje

  3. Jak funguje funkce Exp() v PostgreSQL

  4. SQL Naplnění tabulky náhodnými daty