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: