MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona TRUNCATE() in MariaDB

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