In Oracle Database, de TRUNC(number)
functie geeft een gegeven getal terug, afgekapt tot een bepaald aantal decimalen.
Oracle heeft ook een TRUNC(date)
functie, die wordt gebruikt op datums. Dit artikel gaat uitsluitend over de TRUNC(number)
functie, die op getallen wordt gebruikt.
Syntaxis
De syntaxis gaat als volgt:
TRUNC(n1 [, n2 ])
Waar n1
is de waarde die moet worden afgekapt, en n2
is een optioneel argument dat aangeeft hoeveel decimalen moeten worden afgekapt n1
tot. Als n2
wordt weggelaten, dan n1
wordt afgekapt tot nul decimalen.
n1
kan elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.
Voorbeeld
Hier is een voorbeeld:
SELECT TRUNC(3.95)
FROM DUAL;
Resultaat:
TRUNC(3.95) ______________ 3
Geef een decimale plaats op
Hier is een voorbeeld van het doorgeven van een tweede argument om aan te geven op hoeveel decimalen de waarde moet worden afgekapt:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Resultaat:
TRUNC(1.25817,2) ___________________ 1.25
Hier zijn er nog meer:
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;
Resultaat:
1 2 3 4 ______ _______ ________ _________ 1.2 1.25 1.258 1.2581
Negatieve decimalen
Het tweede argument kan indien nodig een negatieve waarde zijn. Als u een negatieve waarde doorgeeft, worden de cijfers links van de decimale plaats om nul te worden.
Voorbeeld:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Resultaat:
TRUNC(6973.45,-2) ____________________ 6900
Vergeleken met ROUND()
De TRUNC()
functie is anders dan de ROUND()
functie. De ROUND()
functie rondt het getal in sommige gevallen naar boven af en in andere naar beneden. De TRUNC()
functie, aan de andere kant, kapt het getal eenvoudig af zonder af te ronden.
Hier is een vergelijking om dit verschil aan te tonen:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Resultaat:
TRUNC(3.6789,2) ROUND(3.6789,2) __________________ __________________ 3.67 3.68
Het is ook anders dan de FLOOR()
functie, die het grootste gehele getal teruggeeft dat gelijk is aan of kleiner is dan het argument. FLOOR()
accepteert geen tweede argument zoals ROUND()
en TRUNC()
doen (het retourneert sowieso alleen een geheel getal).
Null-waarden
Als een argument null
is , het resultaat is null
:
SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Resultaat:
TRUNC(NULL,2) TRUNC(2.35,NULL) TRUNC(NULL,NULL) ________________ ___________________ ___________________ null null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Niet-numerieke argumenten
Dit is wat er gebeurt als we niet-numerieke argumenten geven:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Resultaat:
Error starting at line : 1 in command - SELECT TRUNC('Hundred', 'Two') FROM DUAL Error report - ORA-01722: invalid number
Ongeldig aantal argumenten
TRUNC()
. aanroepen met het verkeerde aantal argumenten, of zonder een argument resulteert in een fout:
SELECT TRUNC()
FROM DUAL;
Resultaat:
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:
En:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultaat:
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: