sql >> Databasteknik >  >> RDS >> MariaDB

Hur TRUNCATE() fungerar i MariaDB

I MariaDB, TRUNCATE() är en inbyggd numerisk funktion som returnerar ett givet tal, trunkerat till ett givet antal decimaler.

Syntax

Syntaxen ser ut så här:

TRUNCATE(X,D)

Där X är värdet som ska trunkeras, och D anger hur många decimaler den ska trunkeras till.

Exempel

Här är ett exempel:

SELECT TRUNCATE(1.25817, 2);

Resultat:

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

Här är några fler:

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

Resultat (med vertikal utdata):

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

Negativa decimaler

Det andra argumentet kan vara ett negativt värde om det behövs. Att skicka ett negativt värde gör att siffror till vänster av decimalen för att bli noll.

Exempel:

SELECT TRUNCATE(5824.17, -2);

Resultat:

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

Jämfört med ROUND()

TRUNCATE() funktionen skiljer sig från ROUND() fungera. ROUND() funktion avrundar talet uppåt i vissa fall och nedåt i andra. TRUNCATE() funktion, å andra sidan, trunkerar helt enkelt talet utan avrundning.

Här är en jämförelse för att visa denna skillnad:

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

Resultat:

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

Det skiljer sig också från FLOOR() funktion, som returnerar det största heltalsvärdet som inte är större än dess argument. FLOOR() accepterar inte ett andra argument som ROUND() och TRUNCATE() do (det returnerar bara ett heltal ändå).

Icke-numeriska argument

Det här är vad som händer när vi tillhandahåller ett icke-numeriskt argument:

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

Resultat:

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

Låt oss kolla varningen:

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' |
+---------+------+------------------------------------------+

Ogiltigt antal argument

Anropar TRUNCATE() med fel antal argument, eller utan argument resulterar i ett fel:

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

Och:

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

  1. SQL Server Escape ett understreck

  2. Hur statement_timestamp() fungerar i PostgreSQL

  3. En fastighetsbyrådatamodell

  4. Hur man skriver ut flera rapporter med streckkoder \ eller flera streckkoder i en rapport