I Oracle, ROUND(number)
funktion returnerar ett tal avrundat till ett givet antal decimaler.
Som standard avrundas talet till noll decimaler, men du kan ange ett valfritt argument som anger antalet decimaler som ska användas.
Oracle har också en ROUND(date)
syntax, som används på datum. Den här artikeln handlar enbart om ROUND(number)
syntax, som används på tal.
Syntax
Syntaxen ser ut så här:
ROUND(n [, integer ])
Där n
kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp, och integer
är ett valfritt heltal som anger antalet decimaler som ska avrunda n
till.
Exempel
Här är ett exempel:
SELECT ROUND(7.85)
FROM DUAL;
Resultat:
ROUND(7.85) ______________ 8
Negativt värde
Om du ändrar det till ett negativt värde får du följande resultat:
SELECT ROUND(-7.85)
FROM DUAL;
Resultat:
ROUND(-7.85) _______________ -8
Andra argumentet
Här är ett exempel på ett andra argument:
SELECT ROUND(7.85, 1)
FROM DUAL;
Resultat:
ROUND(7.85,1) ________________ 7.9
I det här fallet specificerade jag att resultatet skulle avrundas till en decimal.
Här är ett annat exempel med ett större antal decimaler:
SELECT ROUND(3.14159265359, 4)
FROM DUAL;
Resultat:
ROUND(3.14159265359,4) _________________________ 3.1416
Negativ avrundning
Du kan också ange ett negativt värde för det andra argumentet. Om du gör det avrundas talet till vänster om decimalkomma:
SELECT ROUND(75631, -3)
FROM DUAL;
Resultat:
ROUND(75631,-3) __________________ 76000
Avrundning av icke-numeriska argument
Så här händer när vi försöker runda ett icke-numeriskt argument som inte kan konverteras till en numerisk datatyp:
SELECT ROUND('Bruce')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT ROUND('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Men vi kan runda datum – det finns en datumversion av den här funktionen som låter oss runda av datum.
Nullvärden
Försöker runda null
returnerar null
, och försöker avrunda ett tal med null
resulterar också 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 returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår 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.
Inkorrekt antal argument
Anropar ROUND()
utan att skicka några argument returnerar ett fel:
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:
Och att skicka fel antal argument resulterar i ett fel:
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: