MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie TRUNCATE() in MariaDB funktioniert

In MariaDB TRUNCATE() ist eine eingebaute numerische Funktion, die eine bestimmte Zahl zurückgibt, die auf eine bestimmte Anzahl von Dezimalstellen gekürzt wird.

Syntax

Die Syntax lautet wie folgt:

TRUNCATE(X,D)

Wobei X der zu kürzende Wert ist und D gibt an, auf wie viele Dezimalstellen gekürzt werden soll.

Beispiel

Hier ist ein Beispiel:

SELECT TRUNCATE(1.25817, 2);

Ergebnis:

+----------------------+
| TRUNCATE(1.25817, 2) |
+----------------------+
|                 1.25 |
+----------------------+

Hier sind noch einige:

SELECT 
    TRUNCATE(1.25817, 1),
    TRUNCATE(1.25817, 2),
    TRUNCATE(1.25817, 3),
    TRUNCATE(1.25817, 4);

Ergebnis (bei vertikaler Ausgabe):

TRUNCATE(1.25817, 1): 1.2
TRUNCATE(1.25817, 2): 1.25
TRUNCATE(1.25817, 3): 1.258
TRUNCATE(1.25817, 4): 1.2581

Negative Dezimalstellen

Das zweite Argument kann bei Bedarf ein negativer Wert sein. Das Übergeben eines negativen Werts bewirkt Ziffern nach links der Dezimalstelle zu Null werden.

Beispiel:

SELECT TRUNCATE(5824.17, -2);

Ergebnis:

+-----------------------+
| TRUNCATE(5824.17, -2) |
+-----------------------+
|                  5800 |
+-----------------------+

Im Vergleich zu ROUND()

Das TRUNCATE() Funktion unterscheidet sich von ROUND() Funktion. Das ROUND() Die Funktion rundet die Zahl in einigen Fällen auf und in anderen ab. Das TRUNCATE() Die Funktion hingegen schneidet die Zahl einfach ab, ohne zu runden.

Hier ist ein Vergleich, um diesen Unterschied zu demonstrieren:

SELECT 
    TRUNCATE(3.6789, 2),
    ROUND(3.6789, 2);

Ergebnis:

+---------------------+------------------+
| TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) |
+---------------------+------------------+
|                3.67 |             3.68 |
+---------------------+------------------+

Es unterscheidet sich auch von FLOOR() -Funktion, die den größten ganzzahligen Wert zurückgibt, der nicht größer als ihr Argument ist. FLOOR() akzeptiert kein zweites Argument wie ROUND() und TRUNCATE() tun (es gibt ohnehin immer nur eine Ganzzahl zurück).

Nicht numerische Argumente

Folgendes passiert, wenn wir ein nicht numerisches Argument angeben:

SELECT TRUNCATE('Ten', 'Two');

Ergebnis:

+------------------------+
| TRUNCATE('Ten', 'Two') |
+------------------------+
|                      0 |
+------------------------+
1 row in set, 3 warnings (0.000 sec)

Sehen wir uns die Warnung an:

SHOW WARNINGS;

Ergebnis:

+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'Two' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'Ten'  |
| Warning | 1292 | Truncated incorrect INTEGER value: 'Two' |
+---------+------+------------------------------------------+

Ungültige Argumentanzahl

Aufruf von TRUNCATE() mit der falschen Anzahl von Argumenten oder ohne Argument führt zu einem Fehler:

SELECT TRUNCATE();

Ergebnis:

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

Und:

SELECT TRUNCATE(1, 2, 3);

Ergebnis:

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