Lista de funções numéricas

Como dissemos acima, não basta um SGBD simplesmente armazenar dados de um determinado tipo, ele também precisa suportar um extenso conjunto de operações super-rápidas em dados desses tipos.

E, como você sabe, todos os DBMSs suportam uma variedade de tipos numéricos e operações neles. Hoje você conhecerá os mais populares deles.

Todas as funções numéricas no MySQL podem ser condicionalmente divididas em 5 grupos:

  • operações aritméticas
  • operações de bits
  • Funções de arredondamento
  • funções algébricas
  • Funções trigonométricas

A propósito, você está familiarizado com muitos deles graças à linguagem Java, então acho que eles não serão uma surpresa para você. Mas vamos começar em ordem.

A lista completa de recursos pode ser encontrada aqui .

Operaçoes aritimeticas

Não há, em princípio, nada de inesperado, todas as mesmas operações padrão de outros lugares:

# Exemplo
1 +, -, *, / 2+2*2 Adição, subtração, multiplicação, divisão (não é perfeito!)
2 % 13% 5 Restante da divisão
3 MOD 13MOD5 Restante da divisão
4 DIV 13 DIV 5 Divisão por inteiro

Do interessante: ao dividir dois números inteiros, você obtém um número real. Para dividir por número inteiro, você precisa usar o operador DIV.

Se você deseja obter o restante de uma divisão por um número inteiro, precisa usar o operador MOD ou %, como na linguagem Java. Não vou dar exemplos, pois para mim tudo é óbvio aqui.

operações de bits

Você também pode realizar operações bit a bit em números em SQL, muito parecido com Java. Embora existam nuances. A lista de operações de bit disponíveis é apresentada na tabela abaixo:

# Exemplo Observação
1 & 0b1111 e 0b1000 E bit a bit
2 | 0b1111 | 0b0001 OU bit a bit
3 ^ 0b1111^0b1111 Bit XOR
4 ~ ~0b1111 inversão bit a bit
5 >> 128 >> ​​​​5 Deslocamento de bits para a direita
6 << 2 << 5 Deslocamento de bits para a esquerda
7 BIT_COUNT() BIT_COUNT(255) Retorna o número de bits que são 1

Antes da versão 8.0 do MySQL, tais operações só podiam ser executadas no tipo de dados BIGINT, que tinha 64 bits de comprimento e era semelhante ao tipo longo do Java. No entanto, no MySQL 8.0 (que estamos considerando), o conceito mudou. Agora, essas operações podem ser executadas em tipos binários especiais:

  • BINÁRIO
  • VARBINÁRIO
  • E também sobre tipos BLOB (que são uma matriz de bytes)

Todos os outros tipos são simplesmente convertidos para o tipo BIGINT e as operações são realizadas como antes (somente nos primeiros 64 bits).

Funções de arredondamento

Para o arredondamento no MySQL, são usadas funções dolorosamente familiares a você. Uma lista deles é fornecida na tabela abaixo:

# Exemplo Observação
1 CEIL(), TETO() CEIL (5.1) = 6 Arredonda um número real para cima
2 CHÃO() ANDAR(5,9) = 5 Arredonda um número real para baixo
3 REDONDO() RODADA(4.1) = 4 Arredonda um número real para o inteiro mais próximo
4 TRUNCAR() TRUNCAR(4.123, 2) = 4.12 Trunca um número para N casas decimais
5 ALEATÓRIO() 0,61914388706828 Retorna um número real aleatório entre 0 e 1
6 RAND(N) 0,93845168309142 Retorna um número real aleatório entre 0 e 1. N é usado como valor inicial

Você está familiarizado com todas as funções de arredondamento desde a primeira missão em Java. Somente as funções TRUNCATE() e RANDOM(N) podem ser de interesse aqui.

A função TRUNCATE (número, quantidade) toma como primeiro parâmetro um número real, e como segundo parâmetro o número de casas decimais a serem deixadas. O número é ajustado para o número desejado de casas decimais.

Quanto à função RAND(N), as coisas são um pouco mais complicadas. Como você provavelmente sabe, um computador não pode gerar números aleatórios. Em vez disso, ele gera a chamada sequência numérica pseudo-aleatória. Ou seja, olhando para um número, não fica claro se é aleatório ou não, mas a sequência de números já pode ser semelhante ao aleatório. Os desenvolvedores tiram proveito disso gerando uma sequência de números muito semelhante ao aleatório.

Nesse caso, cada novo número da sequência é gerado de acordo com uma regra complicada baseada no número anterior dessa sequência . Portanto, se você passar um determinado número inicial (também chamado de semente) para o algoritmo de geração de números aleatórios, receberá sempre a mesma sequência de números aleatórios .