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

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

В Oracle, NANVL() функцията ни позволява да се справим с NaN стойности, като посочите друго число, което да се върне на негово място.

Начинът, по който работи, е, че приема два аргумента. Ако първият аргумент е NaN (не число), той връща втория аргумент. Ако първият аргумент е число, след което просто връща това число.

Имайте предвид, че тази функция е полезна само за числа с плаваща запетая от тип BINARY_FLOAT или BINARY_DOUBLE .

Синтаксис

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

NANVL(n2, n1)

Всеки аргумент може да бъде произволен числов тип данни или всеки нечисловен тип данни, който може да бъде имплицитно преобразуван в числов тип данни.

Пример

Можем да произведем NaN чрез разделяне на нула float/удвоена стойност на нула:

SELECT 0f/0 
FROM DUAL;

Резултат:

   0F/0 
_______ 
NaN     

Но ако не искаме NaN за да бъдат върнати, можем да използваме NANVL() функция за връщане на различна стойност:

SELECT NANVL(0f/0, 0) 
FROM DUAL;

Резултат:

   NANVL(0F/0,0) 
________________ 
0.0             

Ето го отново, но този път посочваме различна стойност, която да се върне на мястото на NaN :

SELECT NANVL(0f/0, 123) 
FROM DUAL;

Резултат:

   NANVL(0F/0,123) 
__________________ 
123.0              

NaN Литерал с плаваща запетая

Oracle също така предоставя някои литерали с плаваща запетая за ситуации, които не могат да бъдат изразени като числов литерал. Те включват binary_float_nan което представлява стойност от тип BINARY_FLOAT за които условието IS NAN е вярно и binary_double_nan , което представлява стойност от тип BINARY_DOUBLE за които условието IS NAN е вярно.

Ето пример за използване на тези литерали с плаваща запетая вместо това:

SELECT 
    NANVL(binary_double_nan, 0), 
    NANVL(binary_float_nan, 0)
FROM DUAL;

Резултат:

   NANVL(BINARY_DOUBLE_NAN,0)    NANVL(BINARY_FLOAT_NAN,0) 
_____________________________ ____________________________ 
0.0                           0.0                         

Предаване на номер

Както споменахме, ако първият аргумент е число, тогава той връща това число:

SELECT NANVL(33, 0) 
FROM DUAL;

Резултат:

   NANVL(33,0) 
______________ 
            33 

Нечислови аргументи

Аргументите могат да бъдат всеки числов тип данни или всеки нечисловен тип данни, които могат да бъдат имплицитно преобразувани в числов тип данни.

Ето пример за това какво се случва, когато аргументите не отговарят на тези критерии:

SELECT NANVL('Gosh', 'Dang')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT NANVL('Gosh', 'Dang')
FROM DUAL
Error report -
ORA-01722: invalid number

Нулеви аргументи

NANVL() връща null ако някой аргумент е null :

SET NULL 'null';

SELECT 
    NANVL(null, 16),
    NANVL(1024, null),
    NANVL(null, null)
FROM DUAL;

Резултат:

   NANVL(NULL,16)    NANVL(1024,NULL)    NANVL(NULL,NULL) 
_________________ ___________________ ___________________ 
             null                null                null 

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

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

Липсващи аргументи

Извикване на NANVL() без никакви аргументи води до грешка:

SELECT NANVL()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT NANVL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

Същото важи и при извикването му с твърде много аргументи:

SELECT NANVL(10, 2, 3)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT NANVL(10, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на допълнителни редове - След присъединяване към 3-те маси с помощта на Left Join

  2. Продължаващи вмъквания в Oracle, когато се повдигне изключение

  3. изчислете текущия баланс в заявка на Oracle

  4. Грешка 404 не е намерена с EM 12c

  5. PL/SQL - Пример за грешка за повдигане на приложението