sql >> Databasteknik >  >> RDS >> Oracle

COALESCE() Funktion i Oracle

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"

  1. Kommaseparerade värden i Oracle

  2. Lär dig hur du använder SQL SELECT med exempel

  3. Hur man kontrollerar om en T-SQL UDF är schemabunden (även när den är krypterad)

  4. ORA-01861:literal matchar inte formatsträngen