9.3. Funções e operadores matemáticos

São fornecidos operadores matemáticos para muitos tipos de dado do PostgreSQL. Para os tipos sem as convenções matemáticas habituais para todas as permutações possíveis (por exemplo, os tipos de data e hora), o comportamento real é descrito nas próximas seções.

A Tabela 9-2 mostra os operadores matemáticos disponíveis.

Tabela 9-2. Operadores matemáticos

Operador Descrição Exemplo Resultado
+ adição 2 + 3 5
- subtração 2 - 3 -1
* multiplicação 2 * 3 6
/ divisão (divisão inteira trunca o resultado) 4 / 2 2
% módulo (resto) 5 % 4 1
^ exponenciação 2.0 ^ 3.0 8
|/ raiz quadrada |/ 25.0 5
||/ raiz cúbica ||/ 27.0 3
! fatorial 5 ! 120
!! fatorial (operador de prefixo) !! 5 120
@ valor absoluto @ -5.0 5
& AND bit a bit 91 & 15 11
| OR bit a bit 32 | 3 35
# XOR bit a bit 17 # 5 20
~ NOT bit a bit ~1 -2
<< deslocamento à esquerda bit a bit 1 << 4 16
>> deslocamento à direita bit a bit 8 >> 2 2

Os operadores "bit a bit" [1] também estão disponíveis para os tipos cadeia de bits bit e bit varying, conforme mostrado na Tabela 9-3 . Devem ser do mesmo comprimento as cadeias de bits operandos de &, | e #. Ao ser feito o deslocamento de bits é preservado o comprimento original da cadeia de bits, conforme mostrado nos exemplos.

Tabela 9-3. Operadores bit a bit para cadeias de bit

Exemplo Resultado
B'10001' & B'01101' 00001
B'10001' | B'01101' 11101
B'10001' # B'01101' 11110
~ B'10001' 01110
B'10001' << 3 01000
B'10001' >> 2 00100

A Tabela 9-4 mostra as funções matemáticas disponíveis. Nesta tabela "dp" significa double precision. Muitas destas funções são fornecidas em várias formas, com diferentes tipos de dado dos argumentos. Exceto onde estiver indicado, todas as formas das funções retornam o mesmo tipo de dado de seu argumento. As funções que trabalham com dados do tipo double precision são, em sua maioria, implementadas usando a biblioteca C do sistema hospedeiro; a precisão e o comportamento em casos limites podem, portanto, variar dependendo do sistema hospedeiro.

Tabela 9-4. Funções matemáticas

Função Tipo retornado Descrição Exemplo Resultado
abs(x) (o mesmo de x) valor absoluto abs(-17.4) 17.4
cbrt(dp) dp raiz cúbica cbrt(27.0) 3
ceil(dp ou numeric) (o mesmo da entrada) o menor inteiro não menor que o argumento ceil(-42.8) -42
degrees(dp) dp radianos para graus degrees(0.5) 28.6478897565412
exp(dp ou numeric) (o mesmo da entrada) exponenciação exp(1.0) 2.71828182845905
floor(dp ou numeric) (o mesmo da entrada) o maior inteiro não maior que o argumento floor(-42.8) -43
ln(dp ou numeric) (o mesmo da entrada) logaritmo natural ln(2.0) 0.693147180559945
log(dp ou numeric) (o mesmo da entrada) logaritmo na base 10 log(100.0) 2
log(b numeric, x numeric) numeric logaritmo na base b log(2.0, 64.0) 6.0000000000
mod(y, x) (o mesmo tipo dos argumentos) resto de y/x mod(9,4) 1
pi() dp constante "π" pi() 3.14159265358979
pow(a dp, b dp) dp a elevado a b pow(9.0, 3.0) 729
pow(a numeric, b numeric) numeric a elevado a b pow(9.0, 3.0) 729
radians(dp) dp graus para radianos radians(45.0) 0.785398163397448
random() dp valor randômico entre 0.0 e 1.0 random()  
round(dp ou numeric) (o mesmo da entrada) arredondar para o inteiro mais próximo round(42.4) 42
round(v numeric, s integer) numeric arredondar para s casas decimais round(42.4382, 2) 42.44
setseed(dp) int32 define a semente para as próximas chamadas a random() setseed(0.54823) 1177314959
sign(dp ou numeric) (o mesmo da entrada) sinal do argumento (-1, 0, +1) sign(-8.4) -1
sqrt(dp ou numeric) (o mesmo da entrada) raiz quadrada sqrt(2.0) 1.4142135623731
trunc(dp ou numeric) (o mesmo da entrada) trunca em direção ao zero trunc(42.8) 42
trunc(v numeric, s integer) numeric trunca com s casas decimais trunc(42.4382, 2) 42.43

A Tabela 9-5 mostra as funções trigonométricas disponíveis. Todas as funções trigonométricas recebem argumentos e retornam valores do tipo double precision.

Tabela 9-5. Funções trigonométricas

Função Descrição
acos(x) arco cosseno
asin(x) arco seno
atan(x) arco tangente
atan2(x, y) arco tangente de x/y
cos(x) cosseno
cot(x) cotangente
sin(x) seno
tan(x) tangente

A Tabela 9-6 compara as funções matemáticas e trigonométricas do Oracle , do SQL Server , do DB2 e do PostgreSQL 7.4.1.

Nota: Tabela escrita pelo tradutor, não fazendo parte do manual original.

Tabela 9-6. Funções matemáticas e trigonométricas do Oracle 9i, do SQL Server 2000, do DB2 8.1 e do PostgreSQL 7.4.1

Função Oracle 9i [a] SQL Server 2000 [b] DB2 8.1 PostgreSQL 7.4.1
valor absoluto abs(n) abs(n) abs(n) ou absval(n) abs(x)
arco cosseno acos(n) acos(f) acos(d) acos(x)
arco seno asin(n) asin(f) asin(d) asin(x)
arco tangente de n atan(n) atan(f) atan(d) atan(x)
arco tangente de x/y atan2(n, m) atn2(f, f) atan2(d, d) atan2(x, y)
raiz cúbica - - - cbrt(dp)
menor inteiro não menor que o argumento ceil(n) ceiling(n) ceil(n) ou ceiling(n) ceil(dp ou numeric)
cosseno cos(n) cos(f) cos(d) cos(x)
cosseno hiperbólico cosh(n) - - -
cotangente - cot(f) cot(d) cot(x)
radianos para graus - degrees(n) degrees(d) degrees(dp)
exponenciação exp(n) exp(f) exp(d) exp(dp ou numeric)
maior inteiro não maior que o argumento floor(n) floor(n) floor(n) floor(dp ou numeric)
logaritmo natural ln(n) log(f) ln(d) ou log(d) ln(dp ou numeric)
logaritmo, qualquer base log(m, n) - - log(b numeric, x numeric)
logaritmo, base 10 log(10, n) log10(f) log10(d) log(dp ou numeric)
módulo (resto) mod(m, n) dividendo % divisor mod(n, n) mod(y, x)
constante π - pi() - pi()
potenciação power(m, n) power(n, y) power(n, n) pow(a dp, b dp) e pow(a numeric, b numeric)
radianos - radians(n) radians(d) radians(dp)
número randômico - rand() rand() random()
arredondar para o inteiro mais próximo round(n) round(n,0) round(n,0) round(dp ou numeric)
arredondar para s casas decimais round(n [,s integer]) round(n, s integer [,função]) round(n, s integer) round(v numeric, s integer)
define a semente para as próximas chamadas a random() - rand(semente) rand(semente) setseed(dp)
sinal do argumento (-1, 0, +1) sign(n) sign(n) sign(n) sign(dp ou numeric)
seno sin(n) sin(f) sin(d) sin(x)
seno hiperbólico sinh(n) - - -
raiz quadrada sqrt(n) sqrt(f) sqrt(d) sqrt(dp ou numeric)
tangente tan(n) tan(f) tan(d) tan(x)
tangente hiperbólica tanh(n) - - -
trunca em direção ao zero trunc(n) - trunc(n, 0) trunc(dp ou numeric)
trunca com s casas decimais trunc(n [,s integer]) - trunc(n ,s integer) trunc(v numeric, s integer)
Notas:
a. Oracle 9i — As funções numéricas recebem entradas numéricas e retornam valores numéricos. A maior parte destas funções retornam valores com precisão de 38 dígitos decimais. As funções transcendentais COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN e TANH têm precisão de 36 dígitos decimais. As funções transcendentais ACOS, ASIN, ATAN e ATAN2 têm precisão de 30 dígitos decimais.
b. SQL Server 2000 — As funções aritméticas, tais como ABS, CEILING, DEGREES, FLOOR, POWER, RADIANS e SIGN, retornam um valor que possui o mesmo tipo de dado do valor da entrada. As funções trigonométricas e as demais funções, incluindo EXP, LOG, LOG10, SQUARE e SQRT convertem seus valores de entrada em ponto flutuante, e retornam um valor de ponto flutuante. Todas as funções matemáticas, exceto RAND, são funções determinísticas; retornam o mesmo resultado toda vez que são chamadas com um determinado conjunto de valores de entrada. RAND só é determinística quando é especificado o parâmetro semente.

Notas

[1]

bitwise — um operador bit a bit trata seus operandos como um vetor de bits, em vez de como um único número. FOLDOC - Free On-Line Dictionary of Computing (N. do T.)

SourceForge.net Logo