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

Funkce NANVL() v Oracle

V Oracle, NANVL() funkce nám umožňuje pracovat s NaN hodnoty zadáním jiného čísla, které se má vrátit na jeho místo.

Funguje to tak, že přijímá dva argumenty. Pokud je první argument NaN (ne číslo), vrátí druhý argument. Pokud první argument je číslo, pak toto číslo jednoduše vrátí.

Tato funkce je užitečná pouze pro čísla s plovoucí desetinnou čárkou typu BINARY_FLOAT nebo BINARY_DOUBLE .

Syntaxe

Syntaxe vypadá takto:

NANVL(n2, n1) 

Každý argument může být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.

Příklad

Můžeme vyrobit NaN vydělením nulové plovoucí/dvojité hodnoty nulou:

SELECT 0f/0 
FROM DUAL; 

Výsledek:

 0F/0 _______ NaN 

Ale pokud nechceme NaN k vrácení můžeme použít NANVL() funkce vrátit jinou hodnotu:

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

Výsledek:

 NANVL(0F/0,0) ________________ 0,0 

Tady je to znovu, ale tentokrát určíme jinou hodnotu, která se vrátí místo NaN :

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

Výsledek:

 NANVL(0F/0,123) __________________ 123,0 

NaN Doslov s plovoucí desetinnou čárkou

Oracle také poskytuje některé literály s pohyblivou řádovou čárkou pro situace, které nelze vyjádřit jako číselný literál. Patří mezi ně binary_float_nan což představuje hodnotu typu BINARY_FLOAT pro kterou podmínka IS NAN je true a binary_double_nan , což představuje hodnotu typu BINARY_DOUBLE pro kterou podmínka IS NAN je pravda.

Zde je příklad použití těchto literálů s plovoucí desetinnou čárkou:

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

Výsledek:

 NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) ______________________________ _______________________0_0 .Předání čísla 

Jak bylo zmíněno, pokud je prvním argumentem číslo, vrátí toto číslo:

SELECT NANVL(33, 0) 
FROM DUAL; 

Výsledek:

 NANVL(33,0) _______________ 33 

Nečíselné argumenty

Argumenty mohou být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.

Zde je příklad toho, co se stane, když argumenty nesplňují tato kritéria:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT NANVL('Do prdele', 'Dang')FROM DUALEchybové hlášení -ORA-01722:neplatné číslo

Nulové argumenty

NANVL() vrátí null pokud je nějaký argument null :

SET NULL 'null';

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

Výsledek:

 NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL) _________________ ___________________ ___________________ null
 Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo, kdykoli se v důsledku příkazu SQL SELECT objeví hodnota null. 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.

Chybí argumenty

Volání NANVL() bez jakýchkoli argumentů vede k chybě:

SELECT NANVL()
FROM DUAL; 

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT NANVL()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

A totéž platí, když to voláte s příliš mnoha argumenty:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT NANVL(10, 2, 3)FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

  1. Jak zkontrolovat výsledky úlohy balíčku SSIS poté, co byla dokončena?

  2. SELECT INTO proměnnou tabulky v T-SQL

  3. Úrovně kompatibility a primer pro odhad mohutnosti

  4. ClusterControl - Pokročilá správa zálohování - mariabackup Část I