I MariaDB, TRUNCATE()
er en indbygget numerisk funktion, der returnerer et givet tal, afkortet til et givet antal decimaler.
Syntaks
Syntaksen ser sådan ud:
TRUNCATE(X,D)
Hvor X
er værdien, der skal afkortes, og D
angiver, hvor mange decimaler den skal afkortes til.
Eksempel
Her er et eksempel:
SELECT TRUNCATE(1.25817, 2);
Resultat:
+----------------------+ | TRUNCATE(1.25817, 2) | +----------------------+ | 1.25 | +----------------------+
Her er nogle flere:
SELECT
TRUNCATE(1.25817, 1),
TRUNCATE(1.25817, 2),
TRUNCATE(1.25817, 3),
TRUNCATE(1.25817, 4);
Resultat (ved hjælp af lodret output):
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 decimaler
Det andet argument kan være en negativ værdi, hvis det kræves. Hvis du sender en negativ værdi, bliver cifre til venstre af decimalen for at blive nul.
Eksempel:
SELECT TRUNCATE(5824.17, -2);
Resultat:
+-----------------------+ | TRUNCATE(5824.17, -2) | +-----------------------+ | 5800 | +-----------------------+
Sammenlignet med ROUND()
TRUNCATE()
funktionen er forskellig fra ROUND()
fungere. ROUND()
funktion runder tallet op i nogle tilfælde og ned i andre. TRUNCATE()
funktion afkorter på den anden side blot tallet uden afrunding.
Her er en sammenligning for at demonstrere denne forskel:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultat:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
Det er også anderledes end FLOOR()
funktion, som returnerer den største heltalværdi, der ikke er større end dens argument. FLOOR()
accepterer ikke et andet argument som ROUND()
og TRUNCATE()
do (det returnerer kun et heltal alligevel).
Ikke-numeriske argumenter
Her er, hvad der sker, når vi giver et ikke-numerisk argument:
SELECT TRUNCATE('Ten', 'Two');
Resultat:
+------------------------+ | TRUNCATE('Ten', 'Two') | +------------------------+ | 0 | +------------------------+ 1 row in set, 3 warnings (0.000 sec)
Lad os tjekke advarslen:
SHOW WARNINGS;
Resultat:
+---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | | Warning | 1292 | Truncated incorrect DOUBLE value: 'Ten' | | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | +---------+------+------------------------------------------+
Ugyldigt antal argumenter
Kalder TRUNCATE()
med det forkerte antal argumenter, eller uden et argument resulterer i en fejl:
SELECT TRUNCATE();
Resultat:
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
Og:
SELECT TRUNCATE(1, 2, 3);
Resultat:
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