sql >> Database teknologi >  >> RDS >> Oracle

NANVL() Funktion i Oracle

I Oracle er NANVL() funktion giver os mulighed for at håndtere NaN værdier ved at angive et andet tal, der skal returneres i stedet for.

Den måde, det fungerer på, er, at det accepterer to argumenter. Hvis det første argument er NaN (ikke et tal), returnerer det det andet argument. Hvis det første argument er et tal, så returnerer den simpelthen det tal.

Bemærk, at denne funktion kun er nyttig for flydende kommatal af typen BINARY_FLOAT eller BINARY_DOUBLE .

Syntaks

Syntaksen ser sådan ud:

NANVL(n2, n1)

Hvert argument kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype.

Eksempel

Vi kan producere NaN ved at dividere en float/dobbelt værdi på nul med nul:

SELECT 0f/0 
FROM DUAL;

Resultat:

   0F/0 
_______ 
NaN     

Men hvis vi ikke vil have NaN for at blive returneret, kan vi bruge NANVL() funktion for at returnere en anden værdi:

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

Resultat:

   NANVL(0F/0,0) 
________________ 
0.0             

Her er det igen, men denne gang angiver vi en anden værdi, der skal returneres i stedet for NaN :

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

Resultat:

   NANVL(0F/0,123) 
__________________ 
123.0              

NaN Floating-Point Literal

Oracle giver også nogle bogstaver med flydende komma til situationer, der ikke kan udtrykkes som et numerisk bogstav. Disse inkluderer binary_float_nan som repræsenterer en værdi af typen BINARY_FLOAT for hvilken betingelsen IS NAN er sand, og binary_double_nan , som repræsenterer en værdi af typen BINARY_DOUBLE for hvilken betingelsen IS NAN er sandt.

Her er et eksempel på at bruge disse bogstaver med flydende komma i stedet:

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                         

Videre et nummer

Som nævnt, hvis det første argument er et tal, returnerer det dette tal:

SELECT NANVL(33, 0) 
FROM DUAL;

Resultat:

   NANVL(33,0) 
______________ 
            33 

Ikke-numeriske argumenter

Argumenterne kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype.

Her er et eksempel på, hvad der sker, når argumenterne ikke opfylder disse 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

Nul-argumenter

NANVL() returnerer null hvis et argument er 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 returnerer SQLcl og SQL*Plus et tomt mellemrum, når der opstår en null-værdi som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Manglende argumenter

Kalder NANVL() uden argumenter resulterer i en fejl:

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:

Og det samme gælder, når man kalder det med for mange argumenter:

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. Find duplikerede poster i MySQL

  2. AWS RDS backup metoder

  3. Hvad er JDBC-modstykket til Postgres' \connect-kommando?

  4. Sådan bruger du google translate URL i Oracle plsql