13.4 Fonctions numériques
13 Fonctions à utiliser dans les clauses SELECT et WHERE
Manuel de Référence MySQL 4.1 : Version Française
. Opérations arithmétiques ->Fonctions mathématiques
|
13.4.2 Fonctions mathématiques
Toutes les fonctions mathématiques retournent
NULL
en cas d'erreur.
-
ABS(X)
-
Retourne la valeur absolue de
X
.
mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32
|
Cette fonction est utilisable avec les valeurs issues des champs
BIGINT
.
-
ACOS(X)
-
Retourne l'arccosinus de
X
, c'est à dire, la valeur de l'angle
dont
X
est la cosinus. Retourne
NULL
si
X
n'est pas
dans l'intervalle
-1
-
1
.
mysql> SELECT ACOS(1); -> 0.000000 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.570796
|
-
ASIN(X)
-
Retourne l'arcsinus de
X
, c'est à dire, la valeur de l'angle dont
le sinus est
X
. Retourne
NULL
si
X
n'est pas dans
l'intervalle
-1
-
1
:
mysql> SELECT ASIN(0.2); -> 0.201358 mysql> SELECT ASIN('foo'); -> 0.000000
|
-
ATAN(X)
-
Retourne l'arctangente de
X
, c'est à dire, la valeur de l'angle dont
la tangente est
X
.
mysql> SELECT ATAN(2); -> 1.107149 mysql> SELECT ATAN(-2); -> -1.107149
|
-
ATAN(Y,X)
-
-
ATAN2(Y,X)
-
Retourne l'arctangente des variables
X
et
Y
. Cela revient à
calculer l'arctangente de
Y / X
, excepté que les signes des deux
arguments servent à déterminer le quadrant du résultat :
mysql> SELECT ATAN(-2,2); -> -0.785398 mysql> SELECT ATAN2(PI(),0); -> 1.570796
|
-
CEILING(X)
-
-
CEIL(X)
-
Retourne la valeur entière supérieure de
X
.
mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1
|
Notez que la valeur retournée sera de type
BIGINT
!
-
COS(X)
-
Retourne le cosinus de
X
, où
X
est donné en radians.
mysql> SELECT COS(PI()); -> -1.000000
|
-
COT(X)
-
Retourne la cotangente de
X
.
mysql> SELECT COT(12); -> -1.57267341 mysql> SELECT COT(0); -> NULL
|
-
CRC32(expr)
-
Calcule la somme de contrôle et retourne un entier 32 bits non-signé.
Le résultat est la valeur
NULL
si l'argument est
NULL
.
L'argument attendu est une chaîne, et sera traité comme
une chaîne s'il n'est pas du bon type.
mysql> SELECT CRC32('MySQL'); -> 3259397556
|
CRC32()
est disponible en MySQL 4.1.0.
-
DEGREES(X)
-
Retourne l'argument
X
, convertit de radians en degrés.
mysql> SELECT DEGREES(PI()); -> 180.000000
|
-
EXP(X)
-
Retourne la valeur de
e
(la base des logarithmes naturels) élevé
à la puissance
X
.
mysql> SELECT EXP(2); -> 7.389056 mysql> SELECT EXP(-2); -> 0.135335
|
-
FLOOR(X)
-
Retourne la valeur entière inférieure de
X
.
mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2
|
Notez que la valeur retournée sera de type
BIGINT
!
-
LN(X)
-
Retourne le logarithme naturel de
X
(népérien).
mysql> SELECT LN(2); -> 0.693147 mysql> SELECT LN(-2); -> NULL
|
Cette fonction a été ajoutée à MySQL à partir de la version 4.0.3.
C'est un synonyme de la fonction
LOG(X)
.
-
LOG(X)
-
-
LOG(B,X)
-
Appelée avec un seul paramètre, cette fonction retourne
le logarithme naturel (népérien) de
X
.
mysql> SELECT LOG(2); -> 0.693147 mysql> SELECT LOG(-2); -> NULL
|
Appelée avec deux paramètres, cette fonction retourne le logarithme naturel
de
X
pour une base
B
arbitraire :
mysql> SELECT LOG(2,65536); -> 16.000000 mysql> SELECT LOG(1,100); -> NULL
|
Cette base arbitraire a été ajoutée à MySQL à partir de la version 4.0.3.
LOG(B,X)
est l'équivalent de
LOG(X)/LOG(B)
.
-
LOG2(X)
-
Retourne le logarithme en base 2 de
X
.
mysql> SELECT LOG2(65536); -> 16.000000 mysql> SELECT LOG2(-100); -> NULL
|
LOG2()
est utile pour trouver combien de bits sont nécessaires
pour stocker un nombre.
Cette fonction a été ajoutée à MySQL à partir de la version 4.0.3.
Dans les versions antérieures, vous pouvez utiliser
LOG(X)/LOG(2)
en remplacement.
-
LOG10(X)
-
Retourne le logarithme en base 10 de
X
.
mysql> SELECT LOG10(2); -> 0.301030 mysql> SELECT LOG10(100); -> 2.000000 mysql> SELECT LOG10(-100); -> NULL
|
-
MOD(N,M)
-
-
N % M
-
-
N MOD M
-
Modulo (équivalent de l'opérateur
%
dans le langage C).
Retourne le reste de la division de
N
par
M
.
mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2
|
Cette fonction ne pose pas de problèmes avec les
BIGINT
.
-
PI()
-
Retourne la valeur de pi. Par défaut, 5 décimales sont retournées, mais
MySQL utilise la double précision pour pi.
mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116
|
-
POW(X,Y)
-
-
POWER(X,Y)
-
Retourne la valeur de
X
élevée à la puissance
Y
:
mysql> SELECT POW(2,2); -> 4.000000 mysql> SELECT POW(2,-2); -> 0.250000
|
-
RADIANS(X)
-
Retourne l'argument
X
, converti de degrés en radians.
mysql> SELECT RADIANS(90); -> 1.570796
|
-
RAND()
-
-
RAND(N)
-
Retourne un nombre aléatoire à virgule flottante compris
dans l'intervalle
0
-
1.0
. Si l'argument entier
N
est spécifié, il est utilisé comme initialisation
du générateur de nombres aléatoires.
mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881
|
Vous ne pouvez pas utiliser une colonne de valeur
RAND()
dans une clause
ORDER BY
, parce que
ORDER BY
va évaluer la colonne plusieurs fois.
Dans la version 3.23 de MySQL, vous pouvez, tout de même, faire ceci :
mysql> SELECT * FROM tbl_name ORDER BY RAND();
|
Cette syntaxe est très pratique pour faire une sélection aléatoire de lignes :
mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000;
|
Notez que la fonction
RAND()
dans une clause
WHERE
sera réévaluée à chaque fois
que
WHERE
sera exécuté.
RAND()
n'est pas un générateur parfait de nombres aléatoires, mais
reste une manière rapide de produire des nombres aléatoires
portables selon les différentes plates-formes pour une même version de MySQL.
-
ROUND(X)
-
-
ROUND(X,D)
-
Retourne l'argument
X
, arrondi à un nombre à
D
décimales.
Avec deux arguments, la valeur est arrondie avec
D
décimales.
Si
D
vaut
0
, le résultat n'aura ni de partie décimale, ni de
séparateur de décimal.
mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1 mysql> SELECT ROUND(23.298, -1); -> 20
|
Notez que le comportement de l'opérateur
ROUND()
, lorsque
l'argument est exactement entre deux entiers, dépend de la bibliothèque C active.
Certaines arrondissent toujours à l'entier pair le plus proche, toujours vers le haut,
toujours vers le bas, ou toujours vers zéro. Si vous avez besoin d'un certain type
d'arrondissement, vous devez utiliser une fonction bien définie comme
TRUNCATE()
ou
FLOOR()
.
-
SIGN(X)
-
Retourne le signe de l'argument sous la forme
-1
,
0
, ou
1
, selon
que
X
est négatif, zéro, ou positif.
mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1
|
-
SIN(X)
-
Retourne le sinus de
X
, où
X
est donné en radians.
mysql> SELECT SIN(PI()); -> 0.000000
|
-
SQRT(X)
-
Retourne la racine carrée de
X
.
mysql> SELECT SQRT(4); -> 2.000000 mysql> SELECT SQRT(20); -> 4.472136
|
-
TAN(X)
-
Retourne la tangente de
X
, où
X
est donné en radians.
mysql> SELECT TAN(PI()+1); -> 1.557408
|
-
TRUNCATE(X,D)
-
Retourne l'argument
X
, tronqué à
D
décimales.
Si
D
vaut
0
, le résultat n'aura ni séparateur
décimal, ni partie décimale.
mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9
|
A partir de MySQL 3.23.51 tous les nombres sont arrondis vers zéro.
Notez que les nombres décimaux ne sont pas stockés exactement comme les nombres entiers
, mais comme des valeurs doubles. Vous pouvez être dupés par le résultat suivant :
mysql> SELECT TRUNCATE(10.28*100,0); -> 1027
|
Ce résultat est normal car 10.28 est actuellement stocké comme cela
10.2799999999999999.
|