I Oracle Database er TRUNC(number)
funktion returnerer et givet tal, afkortet til et givet antal decimaler.
Oracle har også en TRUNC(date)
funktion, som bruges på datoer. Denne artikel handler udelukkende om TRUNC(number)
funktion, som bruges på tal.
Syntaks
Syntaksen ser sådan ud:
TRUNC(n1 [, n2 ])
Hvor n1
er værdien, der skal afkortes, og n2
er et valgfrit argument, der angiver, hvor mange decimaler der skal afkortes n1
til. Hvis n2
er udeladt, derefter n1
er afkortet til nul decimaler.
n1
kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype.
Eksempel
Her er et eksempel:
SELECT TRUNC(3.95)
FROM DUAL;
Resultat:
TRUNC(3,95) ______________ 3
Angiv en decimal
Her er et eksempel på at sende et andet argument for at angive, hvor mange decimaler værdien skal afkortes til:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Resultat:
TRUNC(1.25817,2) __________________ 1.25
Her er nogle flere:
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
Negative decimaler
Det andet argument kan være en negativ værdi, hvis det kræves. Hvis du sender en negativ værdi, bliver cifre til venstre af decimalen for at blive nul.
Eksempel:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Resultat:
TRUNC(6973.45,-2) __________________ 6900
Sammenlignet med ROUND()
TRUNC()
funktionen er forskellig fra ROUND()
fungere. ROUND()
funktion runder tallet op i nogle tilfælde og ned i andre. TRUNC()
funktion afkorter på den anden side blot tallet uden afrunding.
Her er en sammenligning for at demonstrere denne forskel:
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 er også anderledes end FLOOR()
funktion, som returnerer det største heltal lig med eller mindre end dets argument. FLOOR()
accepterer ikke et andet argument som ROUND()
og TRUNC()
do (det returnerer kun et heltal alligevel).
Nul-værdier
Hvis et argument er null
, resultatet er 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 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.
Ikke-numeriske argumenter
Her er, hvad der sker, når vi giver ikke-numeriske argumenter:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Resultat:
Fejl starter på linje:1 i kommando -SELECT TRUNC('Hundrede', 'To')FRA DUALE Fejlrapport -ORA-01722:ugyldigt nummer
Ugyldigt argumentantal
Kalder TRUNC()
med det forkerte antal argumenter, eller uden et argument resulterer i en fejl:
SELECT TRUNC()
FROM DUAL;
Resultat:
Fejl starter på linje :1 i kommando -SELECT TRUNC()FROM DUALE Fejl ved kommandolinje :1 Kolonne :8Fejlrapport -SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:
Og:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultat:
Fejl starter på linje :1 i kommando -SELECT TRUNC(1, 2, 3)FROM DUALE Fejl ved kommandolinje :1 Kolonne :20Fejlrapport -SQL-fejl:ORA-00939:for mange argumenter til funktion00939. 00000 - "for mange argumenter for funktion"*Årsag:*Handling: