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: