Oracle
 sql >> Datenbank >  >> RDS >> Oracle

NANVL()-Funktion in Oracle

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: