9.3. Fonctions et opérateurs mathématiques
Des opérateurs mathématiques sont fournis pour un grand nombre de types
PostgreSQL. Pour les types sans conventions
mathématiques standard (les types dates/time, par exemple), le
comportement réel est décrit dans les sections appropriées.
Le Tableau 9.4 affiche les opérateurs
mathématiques disponibles.
Tableau 9.4. Opérateurs mathématiques
Opérateur | Description | Exemple | Résultat |
---|
+ | addition | 2 + 3 | 5 |
- | soustraction | 2 - 3 | -1 |
* | multiplication | 2 * 3 | 6 |
/ | division (la division entière tronque les résultats) | 4 / 2 | 2 |
% | modulo (reste) | 5 % 4 | 1 |
^ | exposant (association de gauche à droite) | 2.0 ^ 3.0 | 8 |
|/ | racine carrée | |/ 25.0 | 5 |
||/ | racine cubique | ||/ 27.0 | 3 |
! | factoriel
(obsolète, utilisez factorial() à la place) | 5 ! | 120 |
!! | factoriel (opérateur préfixe) | !! 5 | 120 |
@ | valeur absolue | @ -5.0 | 5 |
& | AND bit à bit | 91 & 15 | 11 |
| | OR bit à bit | 32 | 3 | 35 |
# | XOR bit à bit | 17 # 5 | 20 |
~ | NOT bit à bit | ~1 | -2 |
<< | décalage gauche | 1 << 4 | 16 |
>> | décalage droit | 8 >> 2 | 2 |
Les opérateurs bit à bit ne fonctionnent que sur les types de données
entiers et sont aussi disponibles pour
les types de chaînes de bits bit
et bit varying
comme le montre le Tableau 9.13.
Le Tableau 9.5 affiche les fonctions
mathématiques disponibles. Dans ce tableau, dp
signifie double precision
. Beaucoup de ces fonctions sont
fournies dans de nombreuses formes avec différents types d'argument.
Sauf précision contraire, toute forme donnée d'une fonction renvoie le
même type de données que son argument.
Les fonctions utilisant des données de type double
precision
sont pour la plupart implantées avec la bibliothèque C du
système hôte ; la précision et le comportement dans les cas
particuliers peuvent varier en fonction du système hôte.
Tableau 9.5. Fonctions mathématiques
Fonction | Type renvoyé | Description | Exemple | Résultat |
---|
abs(x )
| (identique à l'entrée) | valeur absolue | abs(-17.4) | 17.4 |
cbrt(dp )
| dp | racine cubique | cbrt(27.0) | 3 |
ceil(dp ou numeric )
| (identique à l'argument) | plus proche entier plus grand ou égal à l'argument | ceil(-42.8) | -42 |
ceiling(dp ou numeric )
| (identique à l'argument) | plus proche entier plus grand ou égal à l'argumen (identique à ceil ) | ceiling(-95.3) | -95 |
degrees(dp )
| dp | radians vers degrés | degrees(0.5) | 28.6478897565412 |
div(y numeric ,
x numeric )
| numeric | quotient entier de y /x | div(9,4) | 2 |
exp(dp ou numeric )
| (identique à l'argument) | exponentiel | exp(1.0) | 2.71828182845905 |
factorial(bigint )
| numeric | factoriel | factorial(5) | 120 |
floor(dp ou numeric )
| (identique à l'argument) | plus proche entier plus petit ou égal à l'argument | floor(-42.8) | -43 |
ln(dp ou numeric )
| (identique à l'argument) | logarithme | ln(2.0) | 0.693147180559945 |
log(dp ou numeric )
| (identique à l'argument) | logarithme base 10 | log(100.0) | 2 |
log (b
numeric ,
x numeric )
| numeric | logarithme en base b | log(2.0, 64.0) | 6.0000000000 |
mod(y ,
x )
| (identique au type des arguments) | reste de
y /x | mod(9,4) | 1 |
pi()
| dp | constante « pi » | pi() | 3.14159265358979 |
power(a dp ,
b dp )
| dp | a élevé à la puissance
b | power(9.0, 3.0) | 729 |
power (a
numeric ,
b numeric )
| numeric | a élevé à la puissance
b | power(9.0, 3.0) | 729 |
radians(dp )
| dp | degrés vers radians | radians(45.0) | 0.785398163397448 |
round(dp ou numeric )
| (identique à l'argument) | arrondi à l'entier le plus proche | round(42.4) | 42 |
round (v
numeric , s
int )
| numeric | arrondi pour s décimales | round(42.4382, 2) | 42.44 |
scale(numeric )
| integer | échelle de l'argument (le nombre de chiffres décimaux dans la partie de fraction) | scale(8.41) | 2 |
sign(dp ou numeric )
| (identique à l'argument) | signe de l'argument (-1, 0, +1) | sign(-8.4) | -1 |
sqrt(dp ou numeric )
| (identique à l'argument) | racine carrée | sqrt(2.0) | 1.4142135623731 |
trunc(dp ou numeric )
| (identique à l'argument) | tronque vers zéro | trunc(42.8) | 42 |
trunc (v
numeric , s
int )
| numeric | tronque sur s décimales | trunc(42.4382, 2) | 42.43 |
width_bucket(opérande dp , b1 dp , b2 dp , nombre int )
| int | renvoie le numéro du compartiment dans lequel
l'opérande serait affecté dans un
histogramme ayant nombre compartiments
d'égale longueur répartis entre b1
et b2 ; renvoie 0 ou
nombre +1 pour une valeur
d'entrée en dehors de l'intervalle | width_bucket(5.35, 0.024, 10.06, 5) | 3 |
width_bucket(opérande numeric , b1 numeric , b2 numeric , nombre int )
| int | renvoie le numéro du compartiment dans lequel
l'opérande serait affecté dans un
histogramme ayant nombre compartiments
d'égale longueur répartis entre b1
et b2 ; renvoie 0 ou
nombre +1 pour une valeur
d'entrée en dehors de l'intervalle | width_bucket(5.35, 0.024, 10.06, 5) | 3 |
width_bucket(opérande anyelement , seuils anyarray )
| int | renvoie le numéro du compartiment dans lequel
opérande serait affecté compte
tenu d'un tableau qui comporterait les limites inférieures
de chaque compartiment ; renvoie 0 pour une
valeur d'entrée inférieure à la première valeur du tableau ;
le tableau seuils doit
être trié, par ordre croissant, sinon des résultats inattendus
seront obtenus | width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) | 2 |
Tableau 9.6 montre les fonctions de
génération de nombres aléatoires.
Tableau 9.6. Fonctions de génération de nombres aléatoires
Fonction | Type renvoyé | Description |
---|
random()
| dp | valeur aléatoire comprise entre 0,0 et 1,0 |
setseed(dp )
| void | configuration de la graine pour les appels suivants à
random() (valeur comprise entre -1,0 et
1.0, valeurs incluses) |
Les caractéristiques des valeurs renvoyées par
random()
dépendent de l'implémentation
système. Les applications de chiffrement ne devraient pas les utiliser ;
voir le module pgcrypto pour une alternative.
Pour finir, le Tableau 9.7 affiche les fonctions
trigonométriques disponibles. Toutes les fonctions trigonométriques prennent
des arguments et renvoient des valeurs de type double precision
.
Chaque fonction trigonométrique est disponible en deux variantes, une qui
mesure l'angle en radians et l'autre qui mesure l'angle en degrés.
Tableau 9.7. Fonctions trigonométriques
Fonction (radians) | Fonction (degrés) | Description |
---|
acos(x )
|
acosd(x )
| arccosinus |
asin(x )
|
asind(x )
| arcsinus |
atan(x )
|
atand(x )
| arctangente |
atan2(y ,
x )
|
atan2d(y ,
x )
|
arctangente de y /x
|
cos(x )
|
cosd(x )
| cosinus |
cot(x )
|
cotd(x )
| cotangente |
sin(x )
|
sind(x )
| sinus |
tan(x )
|
tand(x )
| tangente |
Note
Un autre moyen de travailler avec des angles mesurés en degrés est
d'utiliser les fonctions de transformation d'unités
radians()
et
degrees()
montrées précédemment.
Néanmoins, l'utilisation des fonctions trigonométriques sur les degrés est
préférée, comme cela évite les erreurs d'arrondis pour les cas spéciaux tels
que sind(30)
.