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

ROUND(tal) Funktion i Oracle

I Oracle er ROUND(number) funktion returnerer et tal afrundet til et givet antal decimaler.

Som standard afrundes tallet til nul decimaler, men du kan angive et valgfrit argument, der angiver antallet af decimaler, der skal bruges.

Oracle har også en ROUND(date) syntaks, som bruges på datoer. Denne artikel handler udelukkende om ROUND(number) syntaks, som bruges på tal.

Syntaks

Syntaksen ser sådan ud:

ROUND(n [, integer ])

Hvor n kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype, og integer er et valgfrit heltal, der angiver antallet af decimaler, der skal afrundes n til.

Eksempel

Her er et eksempel:

SELECT ROUND(7.85)
FROM DUAL;

Resultat:

   ROUND(7.85) 
______________ 
             8 

Negativ værdi

Skift til en negativ værdi giver følgende resultat:

SELECT ROUND(-7.85)
FROM DUAL;

Resultat:

   ROUND(-7.85) 
_______________ 
             -8

Andet argument

Her er et eksempel på at give et andet argument:

SELECT ROUND(7.85, 1)
FROM DUAL;

Resultat:

   ROUND(7.85,1) 
________________ 
             7.9

I dette tilfælde specificerede jeg, at resultatet skulle afrundes til én decimal.

Her er et andet eksempel med et større antal decimaler:

SELECT ROUND(3.14159265359, 4)
FROM DUAL;

Resultat:

   ROUND(3.14159265359,4) 
_________________________ 
                   3.1416

Negativ afrunding

Du kan også angive en negativ værdi for det andet argument. Hvis du gør det, rundes tallet af til venstre for decimaltegnet:

SELECT ROUND(75631, -3)
FROM DUAL;

Resultat:

   ROUND(75631,-3) 
__________________ 
             76000

Afrunding af ikke-numeriske argumenter

Her er, hvad der sker, når vi forsøger at runde et ikke-numerisk argument, der ikke kan konverteres til en numerisk datatype:

SELECT ROUND('Bruce')
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT ROUND('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Vi kan dog afrunde datoer – der er en datoversion af denne funktion, der giver os mulighed for at afrunde datoer.

Nul-værdier

Forsøger at runde null returnerer null , og forsøger at runde et tal med null resulterer også i null :

SET NULL 'null';

SELECT 
    ROUND(null),
    ROUND(null, 2),    
    ROUND(2.345, null)
FROM DUAL;

Resultat:

   ROUND(NULL)    ROUND(NULL,2)    ROUND(2.345,NULL) 
______________ ________________ ____________________ 
          null             null                 null 

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår 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.

Forkert antal argumenter

Kalder ROUND() uden at sende nogen argumenter returnerer en fejl:

SELECT ROUND()
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT ROUND()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Og at sende det forkerte antal argumenter resulterer i en fejl:

SELECT ROUND(1.34, 2, 3)
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT ROUND(1.34, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 23
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Android:Bulk Insert, når InsertHelper er forældet

  2. Spring Boot Query-annotering med nativeQuery virker ikke i Postgresql

  3. Hvorfor foretrækker vi altid at bruge parametre i SQL-sætninger?

  4. Vil GETUTCDATE() returnere den samme værdi, hvis den bruges to gange i den samme sætning?