sql >> Database >  >> RDS >> Oracle

TRUNC(getal) Functie in Oracle

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:

  1. Fix Error "ORA-01790:expressie moet hetzelfde datatype hebben als de corresponderende expressie"

  2. Hoe kan ik query's zien die tegen Oracle worden uitgevoerd?

  3. .nextval JDBC invoegprobleem

  4. Wat te controleren als MySQL-geheugengebruik hoog is?