sql >> Database teknologi >  >> RDS >> Oracle

TRUNC(tal) Funktion i Oracle

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:

  1. Konverter 'datetime offset' til 'time' i SQL Server (T-SQL-eksempler)

  2. PERIOD_DIFF() Eksempler – MySQL

  3. Skrivning af læsbar kode til VBA – Prøv* mønster

  4. MySQL:Vælg alle datoer i et interval, selvom der ikke er nogen registreringer til stede