| 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
 ->Mathematical functions,  , Arithmetic functions, Numeric Functions
 
 
 | 
  13.4.2 Mathematical functions,  , Arithmetic functions, Numeric Functions 
@subsection Fonctions mathématiques
Toutes les fonctions mathématiques retournent  
NULL
  en cas d'erreur.   
 
ABS(X)
 
Retourne la valeur absolue de  
X
 . 
Cette fonction est utilisable avec les valeurs issues des champs  
BIGINT
 .| 
mysql> SELECT ABS(2);-> 2
 mysql> SELECT ABS(-32);
 -> 32
 | 
 
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
 . 
Notez que la valeur retournée sera de type  
BIGINT
 !| 
mysql> SELECT CEILING(1.23);-> 2
 mysql> SELECT CEILING(-1.23);
 -> -1
 | 
 
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. 
CRC32()
  est disponible en MySQL 4.1.0.| 
mysql> SELECT CRC32('MySQL');-> 3259397556
 | 
 
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
 . 
Notez que la valeur retournée sera de type  
BIGINT
 !| 
mysql> SELECT FLOOR(1.23);-> 1
 mysql> SELECT FLOOR(-1.23);
 -> -2
 | 
 
LN(X)
 
Retourne le logarithme naturel de  
X
  (népérien). 
Cette fonction a été ajoutée à  MySQL à partir de la version 4.0.3.
C'est un synonyme de la fonction  
LOG(X)
 .| 
mysql> SELECT LN(2);-> 0.693147
 mysql> SELECT LN(-2);
 -> NULL
 | 
 
LOG(X)
      
      
LOG(B,X)
 
Appelée avec un seul paramètre, cette fonction retourne 
le logarithme naturel (népérien) de  
X
 . 
Appelée avec deux paramètres, cette fonction retourne le logarithme naturel
de  
X
  pour une base  
B
  arbitraire :| 
mysql> SELECT LOG(2);-> 0.693147
 mysql> SELECT LOG(-2);
 -> 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)
 .| 
mysql> SELECT LOG(2,65536);-> 16.000000
 mysql> SELECT LOG(1,100);
 -> NULL
 | 
 
LOG2(X)
 
Retourne le logarithme en base 2 de  
X
 . 
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.| 
mysql> SELECT LOG2(65536);-> 16.000000
 mysql> SELECT LOG2(-100);
 -> NULL
 | 
 
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
 . 
Cette fonction ne pose pas de problèmes avec les  
BIGINT
 .| 
mysql> SELECT MOD(234, 10);-> 4
 mysql> SELECT 253 % 7;
 -> 1
 mysql> SELECT MOD(29,9);
 -> 2
 | 
 
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. 
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 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
 | 
 Cette syntaxe est très pratique pour faire une sélection aléatoire de lignes :| 
mysql> SELECT * FROM tbl_name ORDER BY RAND();
 | 
 Notez que la fonction  
RAND()
  dans une clause  
WHERE
  sera réévaluée à chaque fois
que  
WHERE
  sera exécuté.| 
mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d-> ORDER BY RAND() LIMIT 1000;
 | 
 
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.
 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()
 .| 
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
 | 
 
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. 
A partir de MySQL 3.23.51 tous les nombres sont arrondis vers zéro.| 
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
 | 
 
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 :
 Ce résultat est normal car 10.28 est actuellement stocké comme cela
10.2799999999999999.| 
mysql> SELECT TRUNCATE(10.28*100,0);-> 1027
 | 
 |