PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 10.23 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs mathématiques

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érateurDescriptionExempleRésultat
+ addition2 + 35
- soustraction2 - 3-1
* multiplication2 * 36
/ division (la division entière tronque les résultats)4 / 22
% modulo (reste)5 % 41
^ exposant (association de gauche à droite)2.0 ^ 3.08
|/ racine carrée|/ 25.05
||/ racine cubique||/ 27.03
! factoriel (obsolète, utilisez factorial() à la place)5 !120
!! factoriel (opérateur préfixe)!! 5120
@ valeur absolue@ -5.05
& AND bit à bit91 & 1511
| OR bit à bit32 | 335
# XOR bit à bit17 # 520
~ NOT bit à bit~1-2
<< décalage gauche1 << 416
>> décalage droit8 >> 22

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

FonctionType renvoyéDescriptionExempleRésultat
abs(x) (identique à l'entrée)valeur absolueabs(-17.4)17.4
cbrt(dp) dpracine cubiquecbrt(27.0)3
ceil(dp ou numeric) (identique à l'argument)plus proche entier plus grand ou égal à l'argumentceil(-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) dpradians vers degrésdegrees(0.5)28.6478897565412
div(y numeric, x numeric) numericquotient entier de y/xdiv(9,4)2
exp(dp ou numeric) (identique à l'argument)exponentielexp(1.0)2.71828182845905
factorial(bigint) numericfactorielfactorial(5)120
floor(dp ou numeric) (identique à l'argument)plus proche entier plus petit ou égal à l'argumentfloor(-42.8)-43
ln(dp ou numeric) (identique à l'argument)logarithmeln(2.0)0.693147180559945
log(dp ou numeric) (identique à l'argument)logarithme base 10log(100.0)2
log(b numeric, x numeric)numericlogarithme en base blog(2.0, 64.0)6.0000000000
mod(y, x) (identique au type des arguments)reste de y/xmod(9,4)1
pi() dpconstante « pi »pi()3.14159265358979
power(a dp, b dp) dpa élevé à la puissance bpower(9.0, 3.0)729
power(a numeric, b numeric)numerica élevé à la puissance bpower(9.0, 3.0)729
radians(dp) dpdegrés vers radiansradians(45.0)0.785398163397448
round(dp ou numeric) (identique à l'argument)arrondi à l'entier le plus procheround(42.4)42
round(v numeric, s int)numericarrondi pour s décimalesround(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éesqrt(2.0)1.4142135623731
trunc(dp ou numeric) (identique à l'argument)tronque vers zérotrunc(42.8)42
trunc(v numeric, s int)numerictronque sur s décimalestrunc(42.4382, 2)42.43
width_bucket(opérande dp, b1 dp, b2 dp, nombre int)intrenvoie 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'intervallewidth_bucket(5.35, 0.024, 10.06, 5)3
width_bucket(opérande numeric, b1 numeric, b2 numeric, nombre int)intrenvoie 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'intervallewidth_bucket(5.35, 0.024, 10.06, 5)3
width_bucket(opérande anyelement, seuils anyarray)intrenvoie 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 obtenuswidth_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

FonctionType renvoyéDescription
random() dpvaleur aléatoire comprise entre 0,0 et 1,0
setseed(dp) voidconfiguration 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).