No Oracle Database, o
TRUNC(number)
A função retorna um determinado número, truncado para um determinado número de casas decimais. Oracle também tem um
TRUNC(date)
função, que é usada em datas. Este artigo é apenas sobre o TRUNC(number)
função, que é usada em números. Sintaxe
A sintaxe fica assim:
TRUNC(n1 [, n2 ])
Onde
n1
é o valor a ser truncado e n2
é um argumento opcional que especifica quantas casas decimais truncar n1
para. Se n2
for omitido, então n1
é truncado para zero casas decimais. n1
pode ser qualquer tipo de dados numérico ou qualquer tipo de dados não numérico que possa ser convertido implicitamente em um tipo de dados numérico. Exemplo
Aqui está um exemplo:
SELECT TRUNC(3.95)
FROM DUAL;
Resultado:
TRUNC(3.95) ______________ 3
Especifique uma casa decimal
Aqui está um exemplo de como passar um segundo argumento para especificar para quantas casas decimais truncar o valor:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Resultado:
TRUNC(1.25817,2) ___________________ 1.25
Aqui estão mais alguns:
SELECT
TRUNC(1.25817, 1) AS "1",
TRUNC(1.25817, 2) AS "2",
TRUNC(1.25817, 3) AS "3",
TRUNC(1.25817, 4) AS "4"
FROM DUAL;
Resultado:
1 2 3 4 ______ _______ ________ _________ 1.2 1.25 1.258 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 TRUNC(6973.45, -2)
FROM DUAL;
Resultado:
TRUNC(6973.45,-2) ____________________ 6900
Comparado com ROUND()
O
TRUNC()
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 TRUNC()
A função, por outro lado, simplesmente trunca o número sem arredondamento. Aqui está uma comparação para demonstrar essa diferença:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Resultado:
TRUNC(3.6789,2) ROUND(3.6789,2) __________________ __________________ 3.67 3.68
Também é diferente do
FLOOR()
função, que retorna o maior inteiro igual ou menor que seu argumento. FLOOR()
não aceita um segundo argumento como ROUND()
e TRUNC()
do (ele sempre retorna um inteiro de qualquer maneira). Valores nulos
Se algum argumento for
null
, o resultado é null
:SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Resultado:
TRUNC(NULL,2) TRUNC(2.35,NULL) TRUNC(NULL,NULL) ________________ ___________________ ___________________ null null null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que um valor nulo ocorre como resultado de um SQL
SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumentos não numéricos
Veja o que acontece quando fornecemos argumentos não numéricos:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TRUNC('Hundred', 'Two') FROM DUAL Error report - ORA-01722: invalid number
Contagem de argumentos inválida
Chamando
TRUNC()
com o número errado de argumentos, ou sem um argumento resulta em um erro:SELECT TRUNC()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TRUNC() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
E:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TRUNC(1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 20 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: