Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция COALESCE() в Oracle

В Oracle Database, COALESCE() функцията връща първия ненулев израз в списъка с изрази.

Синтаксис

Синтаксисът е така:

COALESCE(expr [, expr ]...)

Трябва да се предадат поне два израза.

Пример

Ето пример за демонстрация:

SELECT COALESCE(null, 7)
FROM DUAL;

Резултат:

7

Ето още няколко примера:

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;

Резултат:

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

Можем да видим, че COALESCE() връща null когато всички аргументи са нулеви.

По отношение на първия ред SET NULL 'null'; , добавих това, така че моята SQLcl сесия връща null когато резултатът е нулев.

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Пример за база данни

Да предположим, че изпълняваме следната заявка:

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

Резултат:

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

Можем да видим, че няколко от редовете са null в STATE_PROVINCE колона.

Ето отново заявката, освен че този път използваме COALESCE() срещу STATE_PROVINCE колона:

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

Резултат:

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

Затова използвахме COALESCE() за да върнете N/A всеки път, когато се появи нулева стойност.

COALESCE() срещу CASE

Следното:

COALESCE(expr1, expr2)

Еквивалентно на това:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

Невалиден брой аргументи

Извикването на функцията без предаване на аргументи води до грешка:

SELECT COALESCE()
FROM DUAL;

Резултат:

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. извикване на съхранена процедура през dblink

  2. Връщането на Oracle в употреба в Java (JDBC, подготвено изявление)

  3. Скрити функции в Oracle

  4. Oracle Unicode Spooling

  5. Създаване на виртуална машина с Oracle VM Virtual Box