- Categorias:
Funções numéricas (Arredondamento e truncamento)
TRUNCATE , TRUNC¶
Arredonda a expressão de entrada para o valor mais próximo (ou igual) de zero. Dependendo do valor que você especificar como parâmetro de escala, a transformação pode remover:
Todos os dígitos após o ponto decimal, produzindo um valor inteiro. Esse é o uso padrão e mais comum do TRUNC para números.
Alguns dos dígitos significativos após o ponto decimal, produzindo um valor menos preciso.
Todos os dígitos significativos após o ponto decimal e alguns dígitos significativos à esquerda do ponto decimal, produzindo um valor que é um múltiplo de 10, 100 ou outra potência de 10.
As funções TRUNCATE e TRUNC são sinônimas.
Nota
TRUNC está sobrecarregado. Também pode ser usado com valores de data/hora para truncar datas, horas e carimbos de data/hora em uma parte especificada. O TRUNC numérico tem um parâmetro obrigatório e um opcional. A data/hora TRUNC tem dois parâmetros obrigatórios.
Sintaxe¶
TRUNCATE( <input_expr> [ , <scale_expr> ] )
TRUNC( <input_expr> [ , <scale_expr> ] )
Argumentos¶
input_expr
O valor ou expressão a ser utilizado. O tipo de dados deve ser um dos tipos de dados numéricos, como FLOAT ou NUMBER.
scale_expr
O número de dígitos a serem incluídos após o ponto decimal. Use uma expressão que seja avaliada como um número inteiro de -38 a +38.
O padrão
scale_expr
é zero, o que significa que a função remove todos os dígitos após o ponto decimal.Para obter informações sobre escalas negativas, consulte Notas de uso abaixo.
Retornos¶
O tipo de dados do valor retornado é NUMBER(precisão, escala).
Se a escala de entrada foi maior ou igual a zero, então a escala de saída geralmente corresponderá à escala de entrada.
Se a escala de entrada foi negativa, então a escala de saída será 0.
Por exemplo:
O tipo de dados retornado por
TRUNCATE(3.14, 1)
éNUMBER(4, 1)
.O tipo de dados retornado por
TRUNCATE(3.14, 0)
éNUMBER(4, 0)
.O tipo de dados retornado por
TRUNCATE(33.33, -1)
éNUMBER(5, 0)
.
Se a escala for zero, então o valor é efetivamente um número inteiro.
Notas de uso¶
Se
scale_expr
for negativo, então ele especificará o número de casas antes do ponto decimal para ajustar o número. Por exemplo, se a escala for -2, então o resultado será um múltiplo de 100.Se
scale_expr
for maior do que a escala de expressão de entrada, a função não tem qualquer efeito.Se o
input_expr
ou oscale_expr
for NULL, então o resultado será NULL.O truncamento é feito para 0, não para o número menor. Por exemplo,
TRUNCATE(-9.6)
resulta em-9
, não em-10
.
Exemplos¶
Os exemplos a seguir demonstram a função TRUNC para valores numéricos. Para obter exemplos de truncamento de datas, horas e carimbos de data/hora, consulte o formulário de data/hora de TRUNC.
Os exemplos usam dados dessa tabela de amostra. A tabela contém dois números decimais diferentes, -975,975 e 135,135, juntamente com valores diferentes a serem usados para o parâmetro de escala com a função TRUNC.
CREATE TABLE numeric_trunc_demo (n FLOAT, scale INTEGER);
INSERT INTO numeric_trunc_demo (n, scale) VALUES
(-975.975, -1), (-975.975, 0), (-975.975, 2),
( 135.135, -2), ( 135.135, 0), ( 135.135, 1),
( 135.135, 3), ( 135.135, 50), ( 135.135, NULL);
Quando você não especifica um parâmetro de escala, o comportamento padrão de TRUNC com um parâmetro numérico é retornar o valor inteiro que é igual ao parâmetro ou mais próximo de zero. Especificar um parâmetro de escala de 0 faz a mesma coisa.
SELECT DISTINCT n, TRUNCATE(n)
FROM numeric_trunc_demo ORDER BY n;
+----------+-------------+
| N | TRUNCATE(N) |
|----------+-------------|
| -975.975 | -975 |
| 135.135 | 135 |
+----------+-------------+
O exemplo a seguir mostra os resultados da chamada da função TRUNC com parâmetros de escala zero, positivos ou negativos aplicados a um número positivo e negativo.
A especificação de um parâmetro de escala zero remove todos os dígitos após o ponto decimal, produzindo um valor inteiro.
A especificação de um parâmetro de escala positivo deixa o número especificado de dígitos significativos após o ponto decimal.
A especificação de um parâmetro de escala negativo transforma esse número de dígitos em zeros à esquerda do ponto decimal.
Especificar uma escala maior que +38 ou menor que -38 é o mesmo que especificar +38 ou -38.
SELECT n, scale, TRUNC(n, scale)
FROM numeric_trunc_demo ORDER BY n, scale;
+----------+-------+-----------------+
| N | SCALE | TRUNC(N, SCALE) |
|----------+-------+-----------------|
| -975.975 | -1 | -970 |
| -975.975 | 0 | -975 |
| -975.975 | 2 | -975.97 |
| 135.135 | -2 | 100 |
| 135.135 | 0 | 135 |
| 135.135 | 1 | 135.1 |
| 135.135 | 3 | 135.135 |
| 135.135 | 50 | 135.135 |
| 135.135 | NULL | NULL |
+----------+-------+-----------------+