Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TRUNC(número) no Oracle


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: