Banco de Dados - MySQL
MySQL Básico: Funções matemáticas
Veja neste artigo quais são e como utilizar as funções matemáticas nativas do banco de dados MySQL, para realização dos mais diversos tipos de cálculos como logaritmos e funções trigonométricas.
por Joel RodriguesEm nosso dia-a-dia, é muito comum existirem situações em que precisamos realizar cálculos que vão além das operações básicas de adição e multiplicação, como funções trigonométricas e logaritmos. Assim como na “vida real”, não é raro precisarmos realizar tais cálculos em bancos de dados, por isso a maioria dos SGBD’s da atualidade oferecem funções matemáticas nativas para nos auxiliar nessas atividades.
Neste artigo serão apresentadas as funções matemáticas do MySQL, com explicações teóricas e exemplos de uso.
ABS: o nome da função é abreviação de “absolute”, ou “absoluto” em português. Esta função retorna o valor absoluto (também chamado de módulo) do argumento, que pode ser positivo ou negativo. O módulo de um número N, é representado por |N| e é definido como o próprio valor, caso esse seja positivo, ou o inverso do valor, caso seja negativo. Assim, o módulo de um valor será sempre um número positivo.
Figura 1: Exemplo de uso da função ABS
ACOS e ASIN: abreviações de “arco coseno” e “arco seno”, retornam o comprimento do arco cujo coseno ou seno, respectivamente, possui o valor do argumento informado. A Figura 2 ilustra o arco seno e o arco coseno dos valores 1/2 e raiz(2)/2 que valem respectivamente 30 e 45 graus.
Figura 2: Arco seno e arco coseno
Assim, utilizando as funções direto no MySQL, temos o resultado mostrado na figura a seguir.
Figura 3: Exemplo de utilização das funções ACOS e ASIN
Os resultados são dados em radianos, por isso os valores resultantes não são 30 e 45, mas a conversão para verificação pode ser feita usando a função DEGREES, explicada mais adiante.
ATAN e ATAN2: essas funções retornam o valor do arco cuja tangente é passada como parâmetro. Na primeira forma (ATAN), apenas é passado um argumento, enquanto que na segunda são informados dois valores X e Y, e o resultado é o arco cuja tangente vale Y/X. Sabendo que a tangente é a razão entre o seno e o coseno de um ângulo, a função ATAN2 pode ser usada informando-se como parâmetros o cosseno e seno, nessa ordem.
CEIL e CEILING: a função CEIL é uma forma compacta da CEILING, logo ambas têm o mesmo funcionamento, retornando o menor valor inteiro que seja maior que o argumento informado. Por exemplo, o menor valor inteiro e mais próximo de 1,54 é o 2. Enquanto que o para o valor -2,3, o resultado seria -2, pois -2 é maior que -2,3.
CONV: realiza a conversão de um número entre bases numéricas distintas, como a decimal e a hexadecimal. Essa função recebe três argumentos: o valor a ser convertido (que no caso de bases que usem letras, é um string), a base original e a base para a qual se deseja converter o número. A figura a seguir mostra três exemplos de conversão do número 20 para as bases binária, hexadecimal e octal respectivamente.
Figura 4: Exemplos de uso da função CONV
COS e SIN: como o nome sugere, essas funções retornam os valores do coseno e seno do ângulo informado como argumento (em radianos). A Figura 5 mostra exemplos de uso dessas funções. Como o argumento deve estar em radianos, foi utilizada a função PI que será explicada mais adiante. Outro fator a se observar é que o seno de PI resultou em um valor muito pequeno, mas não zero, como esperado. Isso se dá devido a precisão dos valores utilizados pelo MySQL, mas na prática poderia ser utilizada uma função de arredondamento para se obter zero.
Figura 5: Exemplo de uso das funções COS e SIN
COT e TAN: a primeira retorna a cotangente de um ângulo, enquanto a segunda retorna a própria tangente, logo, são funções inversas. A tangente de um ângulo e a razão entre o seno e o coseno, já a cotangente é a razão entre o coseno e o seno. A figura a seguir mostra um exemplo de uso das duas funções, passando como argumento o valor PI/4 que equivale a 45 graus em radianos.
Figura 6: Exemplos de uso das funções TAN e COT
DEGREES e RADIANS: pode-se dizer que são funções inversas, pois enquanto a primeira converte um valor de radianos para graus, a segunda converte um valor de graus para radianos. Na Figura 7 têm-se exemplos de conversão equivalentes, sabendo que PI radianos equivalem a 180 graus.
Figura 7: Exemplos de uso das funções DEGREES e RADIANS
EXP: a função EXP recebe um valor como argumento, retornando o exponencial do mesmo, ou seja, a constante de Euler elevada a este valor. A seguir são mostrados dois exemplos de uso: no primeiro eleva-se a constante de Euler a zero, assim, o resultado é 1 (pois qualquer número elevado a zero vale 1), já no segundo, eleva-se a constante de Euler a 1, obtendo a própria constante.
Figura 8: Exemplos de uso da função EXP
FLOOR: essa função funciona semelhante a CEIL, porém o resultado é o menor número inteiro abaixo do valor informado. Por exemplo, o menor valor inteiro abaixo de 1,23 é 1, enquanto que para o valor -2,3, o resultado é -3, que é menor que -2,3.
LN, LOG2, LOG10e LOG: as três primeiras retornam, respectivamente, o valor do logaritmo natural, do logaritmo na base 2 e do logaritmo na base 10 do valor informado como parâmetro. Já a função LOG pode ser usada de duas formas: na primeira, informa-se apenas um argumento e o resultado é seu logaritmo natural, na segunda informa-se dois valores A e B, e o resultado é o logaritmo de A na base B. A figura a seguir ilustra exemplos de uso das quatro funções.
Figura 9: Exemplos de uso das funções LN, LOG2, LOG10 e LOG
MOD: recebe dois argumentos como parâmetro e retorna o resto da divisão do primeiro pelo segundo. Por exemplo, a instrução MOD(10,3) retorna o valor 1 que é o resto da divisão de 10 por 3.
PI: de nome sugestivo, o retorno dessa função é o valor da constante matemática PI (3,141593 no MySQL), que é a razão entre a circunferência de um círculo e seu diâmetro.
POW e POWER: funcionam da mesma forma, recebendo dois argumentos, retorna o valor do primeiro elevado ao segundo. Exemplo: POW(3,2) vale 9, pois 3 elevado a 2 é igual a 9.
RAND: retorna um valor decimal aleatório. Caso seja informado um argumento inteiro, este é usado como “semente” das sequências de repetição. Para uma mesma raiz, o valor aleatório é sempre o mesmo.
ROUND: essa função arredonda um valor, para um número de casas decimais informado como parâmetro. São esperados um ou dois argumentos. Informando apenas um, o valor é arredondado para um número inteiro, pois a quantidade de casas decimais e assumida como zero. Informando dois parâmetros, o primeiro indica o valor a ser arredondado, enquanto o segundo indica a quantidade de casas decimais a ser considerada. Abaixo tem-se exemplos de uso nos dois casos.
Figura 10: Exemplos de uso da função ROUND
SIGN: a função SIGN retorna o sinal do número passado como parâmetro, representado por 1 caso o argumento seja positivo (maior que zero) ou -1 caso seja negativo (menor que zero).
Figura 11: Exemplos de uso da função SIGN
SQRT: abreviação de “square root”, retorna o valor da raiz quadrada do argumento. Por exemplo, SQRT(4) vale 2.
TRUNCATE: semelhante à função ROUND, essa retorna o valor informado como argumento “truncado”. A diferença entre arredondamento e truncamento, de forma simples, é a seguinte: no truncamento, todas as casas decimais após a quantidade definida são desconsideradas, ou seja, o número é “quebrado”. No arredondamento, a casa decimal posterior àquela na posição informada é considerada no cálculo de arredondamento. Na Figura 12 temos exemplos de uso comparativos entre o TRUNCATE e o ROUND.
Figura 12: Exemplos comparativos de uso das funções TRUNCATE e ROUND
No primeiro caso, todas as casas decimais após a terceira foram desconsideradas. Já no segundo, a quarta casa decimal foi utilizada para definir se a casa anterior (1) seria arredondada para um valor superior (2) ou inferior (0).
Conclusão
Como vimos, o banco de dados MySQL fornece uma série de funções matemáticas que nos permitem realizar praticamente todas as operações mais comuns do dia-a-dia, como potências, logaritmos e funções trigonométricas.
Assim finalizamos este artigo. Até a próxima.