São fornecidos operadores matemáticos para muitos tipos de dados do PostgreSQL. Para os tipos de dados sem convenção matemática padronizada (por exemplo, tipos de dados de data e hora), o comportamento real está descrito nas próximas seções.
A Tabela 9.4 descreve os operadores
matemáticos disponíveis para os tipos de dados numéricos padrão.
Salvo indicação em contrário, os operadores mostrados como aceitando
tipo_numérico estão disponíveis para
os tipos de dados smallint, integer,
bigint, numeric, real
e double precision. Os operadores mostrados como
aceitando tipo_inteiro estão disponíveis
para os tipos de dados smallint, integer
e bigint.
Exceto onde indicado, cada forma do operador retorna o mesmo tipo de
dados do(s) seu(s) argumento(s).
Chamadas envolvendo tipos de dados diferentes como argumentos, tais
como integer + numeric,
são resolvidas usando o tipo de dados que aparece por último nestas
listas.
Tabela 9.4. Operadores matemáticos
Operador Descrição Exemplo(s) |
|---|
Adição
|
Mais unário (sem operação)
|
Subtração
|
Negação
|
Multiplicação
|
Divisão (para tipos de dados inteiros, a divisão trunca o resultado em direção ao zero)
|
Módulo (resto da divisão); disponível para os tipos de dados
|
Exponenciação
Ao contrário da prática matemática usual, múltiplos
|
Raiz quadrada
|
Raiz cúbica
|
Valor absoluto
|
AND bit a bit
|
OR bit a bit
|
OR exclusivo bit a bit
|
NOT bit a bit
|
Deslocamento para a esquerda bit a bit
|
Deslocamento para a direita bit a bit
|
A Tabela 9.5 descreve as funções
matemáticas disponíveis.
Muitas destas funções são fornecidas em várias formas com diferentes
tipos de dados de argumentos.
Exceto onde indicado, qualquer forma da função retorna o mesmo tipo
de dados de seu(s) argumento(s); os casos de tipo-cruzado são
resolvidos da mesma forma explicada acima para os operadores.
As funções que trabalham com dados de precisão dupla são
implementadas principalmente em cima da biblioteca C
do sistema operacional hospedeiro; em casos limite, a precisão e o
comportamento podem, portanto, variar dependendo do sistema operacional
hospedeiro.
Tabela 9.5. Funções matemáticas
A Tabela 9.6 descreve as funções para gerar números aleatórios.
Tabela 9.6. Funções geradoras de número aleatório
As funções random() e
random_normal()
listadas na Tabela 9.6
usam um gerador de números pseudoaleatórios determinístico, que
é rápido mas não é adequado para aplicações de criptografia;
deve ser usado o módulo pgcrypto para obter uma
alternativa mais segura.
Se a função setseed() for chamada,
a série de resultados das chamadas subsequentes a estas funções na
sessão corrente pode ser repetida chamando novamente
setseed() com o mesmo argumento.
Sem nenhuma chamada prévia de setseed()
na mesma sessão, a primeira chamada a qualquer uma destas funções
obtém uma semente de uma fonte de bits aleatórios dependente da
plataforma.
A Tabela 9.7 descreve as funções trigonométricas disponíveis. Cada uma destas funções possui duas formas alternativas: uma que mede ângulos em radianos, e outra que mede ângulos em graus.
Tabela 9.7. Funções trigonométricas
Outra maneira de trabalhar com ângulos medidos em graus é usar as
funções de transformação de unidade
e
radians()
vistas anteriormente.
Entretanto, é preferível usar as funções trigonométricas baseadas
em graus, porque assim são evitados erros de arredondamento para
casos especiais como degrees()sind(30).
A Tabela 9.8 descreve as funções hiperbólicas disponíveis.
Tabela 9.8. Funções hiperbólicas