Oracle
 sql >> Baza danych >  >> RDS >> Oracle

COALESCE() Funkcja w Oracle

W bazie danych Oracle COALESCE() funkcja zwraca pierwsze niezerowe wyrażenie z listy wyrażeń.

Składnia

Składnia wygląda tak:

COALESCE(expr [, expr ]...)

Należy przekazać co najmniej dwa wyrażenia.

Przykład

Oto przykład do zademonstrowania:

SELECT COALESCE(null, 7)
FROM DUAL;

Wynik:

7

Oto kilka przykładów:

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;

Wynik:

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

Widzimy, że COALESCE() zwraca null gdy wszystkie argumenty są puste.

Odnośnie pierwszej linii SET NULL 'null'; , dodałem to, aby moja sesja SQLcl zwracała null ilekroć wynik jest pusty.

Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null występuje w wyniku polecenia SQL SELECT oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.

Przykład bazy danych

Załóżmy, że uruchamiamy następujące zapytanie:

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

Wynik:

   LOCATION_ID      STATE_PROVINCE 
______________ ___________________ 
          1000 null                
          1100 null                
          1200 Tokyo Prefecture    
          1300 null                
          1400 Texas               
          1500 California          

Widzimy, że kilka wierszy jest null w STATE_PROVINCE kolumna.

Oto zapytanie ponownie, ale tym razem używamy COALESCE() przeciwko STATE_PROVINCE kolumna:

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

Wynik:

   LOCATION_ID    COALESCE(STATE_PROVINCE,'N/A') 
______________ _________________________________ 
          1000 N/A                               
          1100 N/A                               
          1200 Tokyo Prefecture                  
          1300 N/A                               
          1400 Texas                             
          1500 California                        

Więc użyliśmy COALESCE() aby zwrócić N/A za każdym razem, gdy wystąpiła wartość pusta.

COALESCE() vs CASE

Następujące:

COALESCE(expr1, expr2)

Jest odpowiednikiem tego:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

Nieprawidłowa liczba argumentów

Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:

SELECT COALESCE()
FROM DUAL;

Wynik:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lista elementów formatu daty i godziny w Oracle

  2. Jak podłączyć Airflow do bazy danych Oracle

  3. 4 sposoby formatowania liczby bez ułamków dziesiętnych w Oracle

  4. Kluczowe zmiany technologiczne w E-Business Suite 12.2

  5. Parsowanie nazw tabel i kolumn z SQL/HQL Java