No MariaDB,
TRUNCATE()
é uma função numérica interna que retorna um determinado número, truncado para um determinado número de casas decimais. Sintaxe
A sintaxe fica assim:
TRUNCATE(X,D)
Onde
X
é o valor a ser truncado e D
especifica quantas casas decimais devem ser truncadas. Exemplo
Aqui está um exemplo:
SELECT TRUNCATE(1.25817, 2);
Resultado:
+----------------------+ | TRUNCATE(1.25817, 2) | +----------------------+ | 1.25 | +----------------------+
Aqui estão mais alguns:
SELECT
TRUNCATE(1.25817, 1),
TRUNCATE(1.25817, 2),
TRUNCATE(1.25817, 3),
TRUNCATE(1.25817, 4);
Resultado (usando saída vertical):
TRUNCATE(1.25817, 1): 1.2 TRUNCATE(1.25817, 2): 1.25 TRUNCATE(1.25817, 3): 1.258 TRUNCATE(1.25817, 4): 1.2581
Casas decimais negativas
O segundo argumento pode ser um valor negativo, se necessário. Passar um valor negativo faz com que os dígitos fiquem à esquerda da casa decimal para se tornar zero.
Exemplo:
SELECT TRUNCATE(5824.17, -2);
Resultado:
+-----------------------+ | TRUNCATE(5824.17, -2) | +-----------------------+ | 5800 | +-----------------------+
Comparado com ROUND()
O
TRUNCATE()
função é diferente da ROUND()
função. O ROUND()
função arredonda o número para cima em alguns casos e para baixo em outros. O TRUNCATE()
A função, por outro lado, simplesmente trunca o número sem arredondamento. Aqui está uma comparação para demonstrar essa diferença:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultado:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
Também é diferente do
FLOOR()
função, que retorna o maior valor inteiro não maior que seu argumento. FLOOR()
não aceita um segundo argumento como ROUND()
e TRUNCATE()
do (ele sempre retorna um inteiro de qualquer maneira). Argumentos não numéricos
Veja o que acontece quando fornecemos um argumento não numérico:
SELECT TRUNCATE('Ten', 'Two');
Resultado:
+------------------------+ | TRUNCATE('Ten', 'Two') | +------------------------+ | 0 | +------------------------+ 1 row in set, 3 warnings (0.000 sec)
Vamos verificar o aviso:
SHOW WARNINGS;
Resultado:
+---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | | Warning | 1292 | Truncated incorrect DOUBLE value: 'Ten' | | Warning | 1292 | Truncated incorrect INTEGER value: 'Two' | +---------+------+------------------------------------------+
Contagem de argumentos inválida
Chamando
TRUNCATE()
com o número errado de argumentos, ou sem um argumento resulta em um erro:SELECT TRUNCATE();
Resultado:
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);
Resultado:
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