MySQL
Rekenkundig
Zoeken…
Opmerkingen
MySQL, op de meeste machines, gebruikt 64-bit IEEE 754 rekenkunde met drijvende komma voor zijn berekeningen.
In integere contexten wordt gebruik gemaakt van integer rekenen.
-
RAND()
is geen perfecte generator voor willekeurige getallen. Het wordt voornamelijk gebruikt om snel pseudo-willekeurige getallen te genereren
Rekenkundige operatoren
MySQL biedt de volgende rekenkundige operatoren
operator | Naam | Voorbeeld |
---|---|---|
+ | toevoeging | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6,0 SELECT 3.5+2; -> 5,5 |
- | aftrekking | SELECT 3-5; -> -2 |
* | Vermenigvuldiging | SELECT 3 * 5; -> 15 |
/ | Divisie | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3.1416 SELECT 10.0 / 0; -> NULL |
DIV | Integer divisie | SELECT 5 DIV 2; -> 2 |
% of 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
Als de getallen in uw rekenkunde allemaal gehele getallen zijn, gebruikt MySQL het BIGINT
(64-bits ondertekende) gehele gegevenstype om zijn werk te doen. Bijvoorbeeld:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1.152.921.504.606.846.977
en
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
buiten bereik fout
DUBBELE
Als getallen in uw rekenkunde fractioneel zijn, gebruikt MySQL 64-bits IEEE 754 rekenkunde met drijvende komma . U moet voorzichtig zijn bij het gebruik van drijvende komma, omdat veel drijvende kommagetallen inherent benaderingen zijn in plaats van exacte waarden .
Wiskundige constanten
Pi
Het volgende retourneert de waarde van PI
opgemaakt met 6 decimalen. De werkelijke waarde is goed om te DOUBLE
;
SELECT PI(); -> 3.141593
Trigonometrie (SIN, COS)
Hoeken zijn in radialen, geen graden. Alle berekeningen worden uitgevoerd in IEEE 754 64-bit drijvende komma . Alle berekeningen met drijvende komma zijn onderworpen aan kleine fouten, bekend als machine ε (epsilon) fouten , dus probeer ze niet te vergelijken voor gelijkheid. Er is geen manier om deze fouten te vermijden bij het gebruik van drijvende komma; ze zijn ingebouwd in de technologie.
Als u DECIMAL
waarden gebruikt in goniometrische berekeningen, worden deze impliciet geconverteerd naar een zwevend punt en vervolgens terug naar een decimaal getal.
Sinus
Retourneert de sinus van een getal X, uitgedrukt in radialen
SELECT SIN(PI()); -> 1.2246063538224e-16
Cosinus
Retourneert de cosinus van X wanneer X wordt gegeven in radialen
SELECT COS(PI()); -> -1
Raaklijn
Retourneert de tangens van een getal X, uitgedrukt in radialen. Merk op dat het resultaat bijna nul is, maar niet precies nul. Dit is een voorbeeld van machine ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arc Cosine (omgekeerde cosinus)
Retourneert de boogcosinus van X als X in het bereik -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Arc Sine (inverse sinus)
Retourneert de boogsinus van X als X in het bereik -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Arc Tangent (inverse tangens)
ATAN(x)
geeft de boogtangens van een enkel getal terug.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
retourneert de ATAN2(X, Y)
van de twee variabelen X en Y. Het is vergelijkbaar met het berekenen van de boogtangens van Y / X. Maar het is numeriek robuuster: t werkt correct als X bijna nul is, en de tekens van beide argumenten worden gebruikt om het kwadrant van het resultaat te bepalen.
Goede praktijk blijkt het schrijven formules te gebruiken ATAN2()
in plaats ATAN()
waar mogelijk.
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
cotangent
Retourneert de cotangens van X
SELECT COT(12); -> -1.5726734063977
conversie
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Afronding (ROND, VLOER, PLAFOND)
Rond een decimaal getal af op een geheel getal
Voor exacte numerieke waarden (bijv. DECIMAL
): als de eerste decimaal van een getal 5 of hoger is, rondt deze functie een getal af naar het volgende gehele getal weg van nul . Als die decimale plaats 4 of lager is, rondt deze functie af naar de volgende gehele waarde die het dichtst bij nul ligt .
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
Voor numerieke waarden (bijv. DOUBLE
): het resultaat van de functie ROUND()
is afhankelijk van de C-bibliotheek; op veel systemen betekent dit dat ROUND()
de ronde naar de dichtstbijzijnde even- regel gebruikt:
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Een getal naar boven afronden
Gebruik de functie CEIL()
of CEILING()
om een getal af te ronden
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Een getal naar beneden afronden
Gebruik de functie FLOOR()
om een getal naar beneden af te ronden
SELECT FLOOR(1.99) -> 1
FLOOR en CEIL gaan naar / weg van -infinity:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Rond een decimaal getal af op een opgegeven aantal decimalen.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
De bespreking van omhoog versus omlaag en "5" is ook van toepassing.
Verhoog een getal naar een macht (POW)
Gebruik een van de functies POW()
of POWER()
om een getal x
te verhogen tot een macht y
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Vierkantswortel (SQRT)
Gebruik de functie SQRT()
. Als het aantal negatief is, wordt NULL
geretourneerd
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Willekeurige nummers (RAND)
Genereer een willekeurig nummer
Gebruik de functie RAND()
om een pseudorandom-getal met drijvende komma tussen 0
en 1
te genereren
Stel dat u de volgende vraag hebt
SELECT i, RAND() FROM t;
Dit zal zoiets teruggeven
ik | RAND() |
---|---|
1 | ,6191438870682 |
2 | ,93845168309142 |
3 | ,83482678498591 |
Willekeurig nummer in een bereik
Om een willekeurig getal in het bereik a <= n <= b te genereren, kunt u de volgende formule gebruiken
FLOOR(a + RAND() * (b - a + 1))
Dit genereert bijvoorbeeld een willekeurig getal tussen 7 en 12
SELECT FLOOR(7 + (RAND() * 6));
Een eenvoudige manier om de rijen in een tabel willekeurig terug te geven:
SELECT * FROM tbl ORDER BY RAND();
Dit zijn pseudo-willekeurige getallen.
De pseudorandom-nummergenerator in MySQL is niet cryptografisch beveiligd. Dat wil zeggen, als u MySQL gebruikt om willekeurige getallen te genereren die als geheimen worden gebruikt, zal een vastberaden tegenstander die weet dat u MySQL hebt gebruikt, gemakkelijker uw geheimen kunnen raden dan u misschien denkt.
Absolute waarde en teken (ABS, SIGN)
Retourneer de absolute waarde van een getal
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
Het sign
van een nummer vergelijkt het met 0.
Teken | Resultaat | Voorbeeld |
---|---|---|
-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