In Oracle die NANVL()
Funktion erlaubt es uns, mit NaN
umzugehen Werte, indem Sie eine andere Zahl angeben, die an ihrer Stelle zurückgegeben werden soll.
Es funktioniert so, dass es zwei Argumente akzeptiert. Wenn das erste Argument NaN
ist (keine Zahl), gibt es das zweite Argument zurück. Wenn das erste Argument ist eine Zahl, dann gibt es einfach diese Zahl zurück.
Beachten Sie, dass diese Funktion nur für Fließkommazahlen vom Typ BINARY_FLOAT
nützlich ist oder BINARY_DOUBLE
.
Syntax
Die Syntax lautet wie folgt:
NANVL(n2, n1)
Jedes Argument kann ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in einen numerischen Datentyp konvertiert werden kann.
Beispiel
Wir können NaN
produzieren durch Teilen eines Null-Float/Double-Werts durch Null:
SELECT 0f/0
FROM DUAL;
Ergebnis:
0F/0 _______ NaN
Aber wenn wir nicht wollen NaN
zurückzugeben, können wir die NANVL()
verwenden Funktion, um einen anderen Wert zurückzugeben:
SELECT NANVL(0f/0, 0)
FROM DUAL;
Ergebnis:
NANVL(0F/0,0) ________________ 0.0
Hier ist es wieder, aber dieses Mal geben wir einen anderen Wert an, der anstelle von NaN
zurückgegeben werden soll :
SELECT NANVL(0f/0, 123)
FROM DUAL;
Ergebnis:
NANVL(0F/0,123) __________________ 123.0
NaN
Fließkommaliteral
Oracle stellt auch einige Fließkommaliterale für Situationen bereit, die nicht als numerisches Literal ausgedrückt werden können. Dazu gehören binary_float_nan
was einen Wert vom Typ BINARY_FLOAT
darstellt für die die Bedingung IS
NAN
wahr ist, und binary_double_nan
, der einen Wert vom Typ BINARY_DOUBLE
darstellt für die die Bedingung IS
NAN
ist wahr.
Hier ist ein Beispiel für die Verwendung dieser Gleitkommaliterale stattdessen:
SELECT
NANVL(binary_double_nan, 0),
NANVL(binary_float_nan, 0)
FROM DUAL;
Ergebnis:
NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) _____________________________ ____________________________ 0.0 0.0
Eine Nummer übergeben
Wie bereits erwähnt, wenn das erste Argument eine Zahl ist, wird diese Zahl zurückgegeben:
SELECT NANVL(33, 0)
FROM DUAL;
Ergebnis:
NANVL(33,0) ______________ 33
Nicht numerische Argumente
Die Argumente können ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in einen numerischen Datentyp konvertiert werden kann.
Hier ist ein Beispiel dafür, was passiert, wenn die Argumente dieses Kriterium nicht erfüllen:
SELECT NANVL('Gosh', 'Dang')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT NANVL('Gosh', 'Dang') FROM DUAL Error report - ORA-01722: invalid number
Null-Argumente
NANVL()
gibt null
zurück wenn irgendein Argument null
ist :
SET NULL 'null';
SELECT
NANVL(null, 16),
NANVL(1024, null),
NANVL(null, null)
FROM DUAL;
Ergebnis:
NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL) _________________ ___________________ ___________________ null null null
Standardmäßig geben SQLcl und SQL*Plus immer dann ein Leerzeichen zurück, wenn als Ergebnis eines SQL SELECT
ein Nullwert auftritt Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Fehlende Argumente
Aufruf von NANVL()
ohne Argumente führt zu einem Fehler:
SELECT NANVL()
FROM DUAL;
Ergebnis:
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:
Und dasselbe gilt, wenn es mit zu vielen Argumenten aufgerufen wird:
SELECT NANVL(10, 2, 3)
FROM DUAL;
Ergebnis:
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: