sql >> Databasteknik >  >> RDS >> Oracle

NANVL() Funktion i Oracle

I Oracle, NANVL() funktionen tillåter oss att hantera NaN värden genom att ange ett annat nummer som ska returneras i dess ställe.

Hur det fungerar är att det accepterar två argument. Om det första argumentet är NaN (inte ett tal), returnerar det det andra argumentet. Om det första argumentet är ett nummer, så returnerar det helt enkelt det numret.

Observera att den här funktionen endast är användbar för flyttal av typen BINARY_FLOAT eller BINARY_DOUBLE .

Syntax

Syntaxen ser ut så här:

NANVL(n2, n1)

Varje argument kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp.

Exempel

Vi kan producera NaN genom att dividera ett nollflytande/dubbelvärde med noll:

SELECT 0f/0 
FROM DUAL;

Resultat:

   0F/0 
_______ 
NaN     

Men om vi inte vill ha NaN för att returneras kan vi använda NANVL() funktion för att returnera ett annat värde:

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

Resultat:

   NANVL(0F/0,0) 
________________ 
0.0             

Här är det igen, men den här gången anger vi ett annat värde som ska returneras i stället för NaN :

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

Resultat:

   NANVL(0F/0,123) 
__________________ 
123.0              

NaN Flytande punkt bokstavlig

Oracle tillhandahåller också några flytande-komma-literaler för situationer som inte kan uttryckas som en numerisk bokstavlig. Dessa inkluderar binary_float_nan som representerar ett värde av typen BINARY_FLOAT för vilket villkoret IS NAN är sant och binary_double_nan , som representerar ett värde av typen BINARY_DOUBLE för vilket villkoret IS NAN är sant.

Här är ett exempel på hur du använder dessa flyttalsliteraler istället:

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

Resultat:

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

Att skicka ett nummer

Som nämnts, om det första argumentet är ett tal, returnerar det det numret:

SELECT NANVL(33, 0) 
FROM DUAL;

Resultat:

   NANVL(33,0) 
______________ 
            33 

Icke-numeriska argument

Argumenten kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp.

Här är ett exempel på vad som händer när argumenten inte uppfyller dessa kriterier:

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

Resultat:

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

Nollargument

NANVL() returnerar null om något argument är null :

SET NULL 'null';

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

Resultat:

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

Som standard returnerar SQLcl och SQL*Plus ett blanksteg närhelst ett nollvärde inträffar som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Argument saknas

Anropar NANVL() utan några argument resulterar i ett fel:

SELECT NANVL()
FROM DUAL;

Resultat:

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:

Och samma sak gäller när man kallar det med för många argument:

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

Resultat:

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. SELECT-fråga med CASE-villkor och SUM()

  2. SQL Between-sats med strängkolumner

  3. Oracle SQL Developer - Hur man återställer tappad tabell

  4. Hur installerar jag ROracle-paketet på Windows 7?