I Oracle Database, TRUNC(number)
funktion returnerar ett givet tal, trunkerat till ett givet antal decimaler.
Oracle har också en TRUNC(date)
funktion, som används på datum. Den här artikeln handlar enbart om TRUNC(number)
funktion, som används på siffror.
Syntax
Syntaxen ser ut så här:
TRUNC(n1 [, n2 ])
Där n1
är värdet som ska trunkeras, och n2
är ett valfritt argument som anger hur många decimaler som ska trunkeras n1
till. Om n2
utelämnas, sedan n1
trunkeras till noll decimaler.
n1
kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp.
Exempel
Här är ett exempel:
SELECT TRUNC(3.95)
FROM DUAL;
Resultat:
TRUNC(3.95) ______________ 3
Ange en decimal
Här är ett exempel på att skicka ett andra argument för att ange hur många decimaler som ska trunkeras till:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Resultat:
TRUNC(1.25817,2) ___________________ 1.25
Här är några fler:
SELECT
TRUNC(1.25817, 1) AS "1",
TRUNC(1.25817, 2) AS "2",
TRUNC(1.25817, 3) AS "3",
TRUNC(1.25817, 4) AS "4"
FROM DUAL;
Resultat:
1 2 3 4 ______ _______ ________ _________ 1.2 1.25 1.258 1.2581
Negativa decimaler
Det andra argumentet kan vara ett negativt värde om det behövs. Att skicka ett negativt värde gör att siffror till vänster av decimalen för att bli noll.
Exempel:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Resultat:
TRUNC(6973.45,-2) ____________________ 6900
Jämfört med ROUND()
TRUNC()
funktionen skiljer sig från ROUND()
fungera. ROUND()
funktion avrundar talet uppåt i vissa fall och nedåt i andra. TRUNC()
funktion, å andra sidan, trunkerar helt enkelt talet utan avrundning.
Här är en jämförelse för att visa denna skillnad:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Resultat:
TRUNC(3.6789,2) ROUND(3.6789,2) __________________ __________________ 3.67 3.68
Det skiljer sig också från FLOOR()
funktion, som returnerar det största heltal som är lika med eller mindre än dess argument. FLOOR()
accepterar inte ett andra argument som ROUND()
och TRUNC()
do (det returnerar bara ett heltal ändå).
Nullvärden
Om något argument är null
, resultatet är null
:
SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Resultat:
TRUNC(NULL,2) TRUNC(2.35,NULL) TRUNC(NULL,NULL) ________________ ___________________ ___________________ null null null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när 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.
Icke-numeriska argument
Så här händer när vi tillhandahåller icke-numeriska argument:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT TRUNC('Hundred', 'Two') FROM DUAL Error report - ORA-01722: invalid number
Ogiltigt antal argument
Anropar TRUNC()
med fel antal argument, eller utan ett argument resulterar i ett fel:
SELECT TRUNC()
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT TRUNC() 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:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT TRUNC(1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 20 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: