In MariaDB, TRUNCATE()
è una funzione numerica incorporata che restituisce un dato numero, troncato a un determinato numero di cifre decimali.
Sintassi
La sintassi è questa:
TRUNCATE(X,D)
Dove X
è il valore da troncare e D
specifica a quante cifre decimali deve essere troncato.
Esempio
Ecco un esempio:
SELECT TRUNCATE(1.25817, 2);
Risultato:
+----------------------+ | TRUNCATE(1.25817, 2) | +----------------------+ | 1.25 | +----------------------+
Eccone altri:
SELECT
TRUNCATE(1.25817, 1),
TRUNCATE(1.25817, 2),
TRUNCATE(1.25817, 3),
TRUNCATE(1.25817, 4);
Risultato (usando l'output verticale):
TRUNCATE(1.25817, 1): 1.2 TRUNCATE(1.25817, 2): 1.25 TRUNCATE(1.25817, 3): 1.258 TRUNCATE(1.25817, 4): 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 TRUNCATE(5824.17, -2);
Risultato:
+-----------------------+ | TRUNCATE(5824.17, -2) | +-----------------------+ | 5800 | +-----------------------+
Rispetto a ROUND()
Il TRUNCATE()
la funzione è diversa da ROUND()
funzione. Il ROUND()
la funzione arrotonda il numero per eccesso in alcuni casi e per difetto in altri. Il TRUNCATE()
la funzione, d'altra parte, tronca semplicemente il numero senza arrotondare.
Ecco un confronto per dimostrare questa differenza:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Risultato:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
È anche diverso da FLOOR()
funzione, che restituisce il valore intero più grande non maggiore del suo argomento. FLOOR()
non accetta un secondo argomento come ROUND()
e TRUNCATE()
do (restituisce sempre e solo un numero intero).
Argomenti non numerici
Ecco cosa succede quando forniamo un argomento non numerico:
SELECT TRUNCATE('Ten', 'Two');
Risultato:
+------------------------+ | TRUNCATE('Ten', 'Two') | +------------------------+ | 0 | +------------------------+ 1 row in set, 3 warnings (0.000 sec)
Controlliamo l'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | | Warning | 1292 | Truncated incorrect DOUBLE value: 'Ten' | | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | +---------+------+------------------------------------------+
Conteggio argomenti non valido
Chiamando TRUNCATE()
con il numero errato di argomenti o senza un argomento genera un errore:
SELECT TRUNCATE();
Risultato:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
E:
SELECT TRUNCATE(1, 2, 3);
Risultato:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 3)' at line 1