sql >> Database >  >> RDS >> Oracle

NANVL() Functie in Oracle

In Oracle, de NANVL() functie stelt ons in staat om te gaan met NaN waarden door een ander nummer op te geven dat in de plaats moet worden geretourneerd.

De manier waarop het werkt, is dat het twee argumenten accepteert. Als het eerste argument NaN . is (geen getal), het retourneert het tweede argument. Als het eerste argument is een getal, dan geeft het gewoon dat getal terug.

Merk op dat deze functie alleen nuttig is voor getallen met drijvende komma van het type BINARY_FLOAT of BINARY_DOUBLE .

Syntaxis

De syntaxis gaat als volgt:

NANVL(n2, n1)

Elk argument kan elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.

Voorbeeld

We kunnen NaN . produceren door een nul float/double waarde te delen door nul:

SELECT 0f/0 
FROM DUAL;

Resultaat:

   0F/0 
_______ 
NaN     

Maar als we NaN . niet willen om te worden geretourneerd, kunnen we de NANVL() . gebruiken functie om een ​​andere waarde te retourneren:

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

Resultaat:

   NANVL(0F/0,0) 
________________ 
0.0             

Hier is het weer, maar deze keer specificeren we een andere waarde om terug te keren in plaats van NaN :

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

Resultaat:

   NANVL(0F/0,123) 
__________________ 
123.0              

NaN Drijvende-komma letterlijke

Oracle biedt ook enkele letterlijke drijvende komma's voor situaties die niet kunnen worden uitgedrukt als een numerieke letterlijke. Deze omvatten binary_float_nan wat staat voor een waarde van het type BINARY_FLOAT waarvoor de voorwaarde IS NAN is waar, en binary_double_nan , wat staat voor een waarde van het type BINARY_DOUBLE waarvoor de voorwaarde IS NAN is waar.

Hier is een voorbeeld van het gebruik van deze drijvende-kommaliteralen:

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

Resultaat:

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

Een nummer doorgeven

Zoals gezegd, als het eerste argument een getal is, wordt dat getal geretourneerd:

SELECT NANVL(33, 0) 
FROM DUAL;

Resultaat:

   NANVL(33,0) 
______________ 
            33 

Niet-numerieke argumenten

De argumenten kunnen elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.

Hier is een voorbeeld van wat er gebeurt als de argumenten niet aan die criteria voldoen:

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

Resultaat:

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

Nullargumenten

NANVL() retourneert null als een argument null is :

SET NULL 'null';

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

Resultaat:

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

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ontbrekende argumenten

Aanroepen van NANVL() zonder argumenten resulteert in een fout:

SELECT NANVL()
FROM DUAL;

Resultaat:

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:

En hetzelfde geldt als je het met te veel argumenten aanroept:

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

Resultaat:

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. Automatisering gebruiken om releasetests op PostgreSQL te versnellen

  2. Hoe bekijk ik het Explain Plan in Oracle Sql developer?

  3. SQL-fout:ORA-02000:ontbreekt ALTIJD trefwoord bij het maken van een op identiteitskolom gebaseerde tabel

  4. Is gelijk aan(=) vs. LIKE voor datumgegevenstype