Recherche…


Remarques

MySQL, sur la plupart des machines, utilise l' arithmétique flottante IEEE 754 64 bits pour ses calculs.

Dans les contextes entiers, il utilise l'arithmétique entière.

  • RAND() n'est pas un générateur de nombres aléatoires parfait. Il est principalement utilisé pour générer rapidement des nombres pseudo-aléatoires

Opérateurs arithmétiques

MySQL fournit les opérateurs arithmétiques suivants

Opérateur prénom Exemple
+ Une addition SELECT 3+5; -> 8
SELECT 3.5+2.5; -> 6.0
SELECT 3.5+2; -> 5.5
- Soustraction SELECT 3-5; -> -2
* Multiplication SELECT 3 * 5; -> 15
/ Division SELECT 20 / 4; -> 5
SELECT 355 / 113; -> 3.1416
SELECT 10.0 / 0; -> NULL
DIV Division entière SELECT 5 DIV 2; -> 2
% ou MOD Modulo SELECT 7 % 3; -> 1
SELECT 15 MOD 4 -> 3
SELECT 15 MOD -4 -> 3
SELECT -15 MOD 4 -> -3
SELECT -15 MOD -4 -> -3
SELECT 3 MOD 2.5 -> 0.5

BIGINT

Si les nombres de votre arithmétique sont tous des nombres entiers, MySQL utilise le type de données entier BIGINT (signé 64 bits) pour faire son travail. Par exemple:

select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1 -> 1,152,921,504,606,846,977

et

select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024 -> BIGINT hors plage

DOUBLE

Si des nombres dans votre arithmétique sont fractionnaires, MySQL utilise l' arithmétique flottante IEEE 754 64 bits . Vous devez faire attention lorsque vous utilisez l'arithmétique à virgule flottante, car de nombreux nombres à virgule flottante sont, par nature, des approximations plutôt que des valeurs exactes .

Constantes Mathématiques

Pi

Le texte suivant renvoie la valeur de PI formatée à 6 décimales. La valeur réelle est bonne pour DOUBLE ;

SELECT PI();    -> 3.141593

Trigonométrie (SIN, COS)

Les angles sont en radians, pas en degrés. Tous les calculs sont effectués en virgule flottante IEEE 754 64 bits . Tous les calculs en virgule flottante sont sujets à de petites erreurs, appelées erreurs ε (epsilon) , évitez donc de les comparer pour obtenir une égalité. Il n'y a aucun moyen d'éviter ces erreurs lors de l'utilisation de virgule flottante; ils sont intégrés à la technologie.

Si vous utilisez les valeurs DECIMAL dans les calculs trigonométriques, elles sont implicitement converties en virgule flottante, puis de nouveau en décimales.

Sinus

Retourne le sinus d'un nombre X exprimé en radians

SELECT SIN(PI()); -> 1.2246063538224e-16

Cosinus

Retourne le cosinus de X quand X est donné en radians

SELECT COS(PI()); -> -1

Tangente

Renvoie la tangente d'un nombre X exprimé en radians. Notez que le résultat est très proche de zéro, mais pas exactement zéro. Ceci est un exemple de machine ε.

SELECT TAN(PI());   -> -1.2246063538224e-16

Arc Cosinus (cosinus inverse)

Retourne l'arc cosinus de X si X est compris entre -1 to 1

SELECT ACOS(1);    -> 0
SELECT ACOS(1.01); -> NULL

Arc Sine (sinus inverse)

Retourne l'arc sinus de X si X est compris entre -1 to 1

SELECT ASIN(0.2); -> 0.20135792079033

Arc tangente (tangente inverse)

ATAN(x) renvoie l'arc tangente d'un nombre unique.

SELECT ATAN(2); -> 1.1071487177941

ATAN2(X, Y) renvoie l'arc tangent des deux variables X et Y. Il est similaire au calcul de l'arc tangent de Y / X. Mais il est numériquement plus robuste: t fonctionne correctement lorsque X est proche de zéro et que les signes des deux arguments sont utilisés pour déterminer le quadrant du résultat.

Les meilleures pratiques suggèrent d'écrire des formules pour utiliser ATAN2() plutôt ATAN() mesure du possible.

 ATAN2(1,1);    -> 0.7853981633974483 (45 degrees)
 ATAN2(1,-1);   -> 2.356194490192345  (135 degrees)
 ATAN2(0, -1);  -> PI  (180 degrees)  don't try ATAN(-1 / 0)... it won't work

Cotangente

Renvoie la cotangente de X

SELECT COT(12); -> -1.5726734063977

Conversion

SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180

Arrondi (ROUND, FLOOR, CEIL)

Arrondir un nombre décimal à une valeur entière

Pour les valeurs numériques exactes (par exemple, DECIMAL ): Si la première décimale d'un nombre est supérieure ou égale à 5, cette fonction arrondira le nombre à l'entier suivant, à partir de zéro . Si cette décimale est 4 ou moins, cette fonction arrondira à la prochaine valeur entière la plus proche de zéro .

SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5

Pour les valeurs numériques approximatives (par exemple DOUBLE ): Le résultat de la fonction ROUND() dépend de la bibliothèque C; sur de nombreux systèmes, cela signifie que ROUND() utilise le tour à la règle la plus proche :

SELECT ROUND(45e-1) -> 4  -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6  -- The nearest even value is 6

Arrondir un nombre

Pour arrondir une utilisation du numéro soit la CEIL() ou CEILING() fonction

SELECT CEIL(1.23)    -> 2
SELECT CEILING(4.83) -> 5

Arrondissez un nombre

Pour arrondir un nombre, utilisez la fonction FLOOR()

SELECT FLOOR(1.99) -> 1

FLOOR et CEIL vont vers / loin de l'infini:

SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1

Arrondissez un nombre décimal à un nombre spécifié de décimales.

SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200

La discussion de haut contre bas et "5" s'applique aussi.

Augmenter un nombre à une puissance (POW)

Pour élever un nombre x à une puissance y , utilisez les fonctions POW() ou POWER()

SELECT POW(2,2); => 4
SELECT POW(4,2); => 16

Racine Carrée (SQRT)

Utilisez la fonction SQRT() . Si le nombre est négatif, NULL sera renvoyé

SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL

Nombres Aléatoires (RAND)

Générer un nombre aléatoire

Pour générer un nombre à virgule flottante pseudo-aléatoire compris entre 0 et 1 , utilisez la fonction RAND()

Supposons que vous ayez la requête suivante

SELECT i, RAND() FROM t;

Cela retournera quelque chose comme ça

je RAND()
1 0.6191438870682
2 0.93845168309142
3 0.83482678498591

Nombre aléatoire dans une plage

Pour générer un nombre aléatoire dans la plage a <= n <= b, vous pouvez utiliser la formule suivante

FLOOR(a + RAND() * (b - a + 1))

Par exemple, cela générera un nombre aléatoire entre 7 et 12

SELECT FLOOR(7 + (RAND() * 6));

Un moyen simple de retourner aléatoirement les lignes d'une table:

SELECT * FROM tbl ORDER BY RAND();

Ce sont des nombres pseudo - aléatoires .

Le générateur de nombres pseudo-aléatoires de MySQL n'est pas cryptographiquement sécurisé. Autrement dit, si vous utilisez MySQL pour générer des nombres aléatoires à utiliser comme des secrets, un adversaire déterminé qui sait que vous avez utilisé MySQL pourra deviner vos secrets plus facilement que vous ne le pensez.

Valeur absolue et signe (ABS, SIGN)

Renvoie la valeur absolue d'un nombre

SELECT ABS(2);   -> 2
SELECT ABS(-46); -> 46

Le sign d'un nombre le compare à 0.

Signe Résultat Exemple
-1 n <0 SELECT SIGN(42); -> 1
0 n = 0 SELECT SIGN(0); -> 0
1 n> 0 SELECT SIGN(-3); -> -1
SELECT SIGN(-423421); -> -1


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow