MySQL
Arithmétique
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