Des opérateurs mathématiques sont fournis pour un grand nombre de types PostgreSQL™. Pour les types sans conventions mathématiques standards (les types dates/time, par exemple), le comportement réel est décrit dans les sections appropriées.
Le Tableau 9.4, « Opérateurs mathématiques » 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 | 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 alors que les autres sont disponibles pour tous les types de données numériques. Les opérateurs bit à bit sont aussi disponibles pour les types de chaînes de bits bit et bit varying comme le montre le Tableau 9.13, « Opérateurs sur les chaînes de bits ».
Le Tableau 9.5, « Fonctions mathématiques » 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) | nearest integer greater than or equal to argument | ceil(-42.8) | -42 |
ceiling(dp ou numeric) | (identique à l'argument) | nearest integer greater than or equal to argument (same as 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 |
floor(dp ou numeric) | (identique à l'argument) | nearest integer less than or equal to 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é | 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'égal 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'égal 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, « Fonctions de génération de nombres aléatoires » montre les fonctions de génération de nombre 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, « Fonctions trigonométriques » 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 radian et l'autre qui mesure l'angle en degrée.
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 |
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).