Olá pessoal!

Tive uma semana conturbada e não deu para postar nada, mas comecei a escrever algo e terminei há pouco.

Bom...

Hoje vou falar sobre duas funções de linha simples: round e trunc.

Só relembrando as primeiras aulas de banco de dados da faculdade, funções de linha simples são as que operam com uma linha de conjunto de dados por vez. Se uma instrução SQL seleciona 20 linhas (registros), a função será executada 20 vezes, uma para cada linha.

As funções round e trunc podem ser usadas em campos do tipo numérico e data, mas minha abordagem será apenas sobre número.

A função ROUND
Essa função realiza uma operação de arredondamento de um valor com base em uma precisão especificada.

A sintaxe da função ROUND pode ser observada na Figura 1.

Figura 1 - Sintaxe da função ROUND. (Fonte: Oracle Corporation)

O grau de arredondamento ou precisão é opcional e caso exista, deve ser um valor decimal, e para o caso desse valor ser “n”, onde n > 0, o dígito significante ao arredondamento é encontrado (n+1) do lado direito do ponto decimal, ou seja:
SELECT ROUND (1.259, 2) valor FROM DUAL;

A precisão é igual a 2 nesse exemplo, portanto o dígito de arredondamento nesse caso será o de posição 2 após (lado direito) o ponto, nesse caso o valor “5”.

Para o caso do valor da precisão ser um número negativo, o dígito significante ao arredondamento é “n” colocado do lado esquerdo do ponto:
SELECT ROUND (136.479, -1) valor FROM DUAL;

Nesse caso a precisão é -1, então o arredondamento será feito no primeiro dígito após o ponto decimal, nesse caso o valor “6”.

Se o valor numérico do dígito significante for maior ou igual a 5, um arredondamento para cima ocorrerá, caso contrário será um arredondamento para baixo. Se não for informada a precisão de arredondamento para a função round, o grau padrão de arredondamento é zero, significando que a origem será arredondada para o número inteiro mais próximo (lado esquerdo do ponto decimal).

Vou dar uns exemplos para facilitar o entendimento:

SELECT ROUND (1652.479, 2) AS valor FROM DUAL
UNION ALL
SELECT ROUND (1652.479, 1) AS valor FROM DUAL
UNION ALL
SELECT ROUND (1652.479) AS valor FROM DUAL
UNION ALL
SELECT ROUND (1652.479, -1) AS valor FROM DUAL
UNION ALL
SELECT ROUND (1652.479, -2) AS valor FROM DUAL;

O resultado para as consultas do exemplo pode ser conferido na Figura 2.

Figura 2 - Resultado de consultas utilizando o comando round. (Fonte: autoria própria)

A função TRUNC
A função trunc realiza uma operação de truncamento em um valor numérico com base em uma precisão decimal especificada, que assim como a função round, é opcional. A diferença entre as funções round e trunc é que a segunda função “quebra” o resultado na precisão decimal especificada e não tenta arredondar para cima ou para baixo.

A sintaxe do comando trunc pode ser configurada na Figura 3.

Figura 3 - Sintaxe da função TRUNC. (Fonte: Oracle Corporation)

Como os conceitos entre as funções round e trunc são bem parecidos, vou partir para exemplos do comando TRUNC para facilitar o entendimento:

SELECT TRUNC (1652.479123, 3) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123, 2) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123, 1) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123, -1) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123, -2) AS valor FROM DUAL
UNION ALL
SELECT TRUNC (1652.479123, -3) AS valor FROM DUAL;


Figura 4 - Resultado de consultas utilizando o comando trunc. (Fonte: autoria própria)

Esses comandos de linhas simples são bastante eficientes e muito útil quando se precisa trabalhar com precisões.

Espero ter conseguido passar o entendimento sobre as funções.

Grande abraço e até a próxima!

Referências:

WATSON, JOHN – Ramklass, Roopesh (2010) – OCA Oracle Database 11g – Fundamentos I SQL – Manual do Exame 1z0-051. Editora: ALTABOOKS.

ORACLE CORPORATION – ROUND (number). Disponível em: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions135.htm. Acessado em 24/03/2013.              

ORACLE CORPORATION – TRUNC (number). Disponível em: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions200.htm. Acessado em 24/03/2013.