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

TRUNC(numero) Funzione in Oracle

In Oracle Database, il TRUNC(number) la funzione restituisce un dato numero, troncato a un determinato numero di cifre decimali.

Oracle ha anche un TRUNC(date) funzione, che viene utilizzata sulle date. Questo articolo riguarda esclusivamente il TRUNC(number) funzione, che viene utilizzata sui numeri.

Sintassi

La sintassi è questa:

TRUNC(n1 [, n2 ])

Dove n1 è il valore da troncare e n2 è un argomento facoltativo che specifica quante cifre decimali troncare n1 a. Se n2 viene omesso, quindi n1 viene troncato a zero cifre decimali.

n1 può essere qualsiasi tipo di dati numerico o qualsiasi tipo di dati non numerico che può essere convertito in modo implicito in un tipo di dati numerico.

Esempio

Ecco un esempio:

SELECT TRUNC(3.95)
FROM DUAL;

Risultato:

   TRUNC(3.95) 
______________ 
             3

Specifica un punto decimale

Ecco un esempio di passaggio di un secondo argomento per specificare a quante cifre decimali troncare il valore:

SELECT TRUNC(1.25817, 2)
FROM DUAL;

Risultato:

   TRUNC(1.25817,2) 
___________________ 
               1.25

Eccone altri:

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;

Risultato:

     1       2        3         4 
______ _______ ________ _________ 
   1.2    1.25    1.258    1.2581 

Punti decimali negativi

Il secondo argomento può essere un valore negativo, se necessario. Il passaggio di un valore negativo fa sì che le cifre si trovino a sinistra della cifra decimale per diventare zero.

Esempio:

SELECT TRUNC(6973.45, -2)
FROM DUAL;

Risultato:

   TRUNC(6973.45,-2) 
____________________ 
                6900

Rispetto a ROUND()

Il TRUNC() la funzione è diversa da ROUND() funzione. Il ROUND() la funzione arrotonda il numero per eccesso in alcuni casi e per difetto in altri. Il TRUNC() la funzione, d'altra parte, tronca semplicemente il numero senza arrotondare.

Ecco un confronto per dimostrare questa differenza:

SELECT 
    TRUNC(3.6789, 2),
    ROUND(3.6789, 2)
FROM DUAL;

Risultato:

   TRUNC(3.6789,2)    ROUND(3.6789,2) 
__________________ __________________ 
              3.67               3.68 

È anche diverso da FLOOR() funzione, che restituisce il numero intero più grande uguale o inferiore al suo argomento. FLOOR() non accetta un secondo argomento come ROUND() e TRUNC() do (restituisce sempre e solo un numero intero).

Valori Nulli

Se un argomento è null , il risultato è null :

SET NULL 'null';

SELECT 
    TRUNC(null, 2),
    TRUNC(2.35, null),
    TRUNC(null, null)
FROM DUAL;

Risultato:

   TRUNC(NULL,2)    TRUNC(2.35,NULL)    TRUNC(NULL,NULL) 
________________ ___________________ ___________________ 
            null                null                null 

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che si verifica un valore nullo come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Argomenti non numerici

Ecco cosa succede quando forniamo argomenti non numerici:

SELECT TRUNC('Hundred', 'Two')
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT TRUNC('Hundred', 'Two')
FROM DUAL
Error report -
ORA-01722: invalid number

Conteggio argomenti non valido

Chiamando TRUNC() con il numero errato di argomenti o senza un argomento genera un errore:

SELECT TRUNC()
FROM DUAL;

Risultato:

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:

E:

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Risultato:

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: