MySQL
Arithmetik
Suche…
Bemerkungen
MySQL verwendet auf den meisten Maschinen eine 64-Bit-Gleitkomma-Arithmetik nach IEEE 754 für seine Berechnungen.
In ganzzahligen Kontexten wird die Ganzzahlarithmetik verwendet.
-
RAND()
ist kein perfekter Zufallszahlengenerator. Es wird hauptsächlich zur schnellen Erzeugung von Pseudozufallszahlen verwendet
Rechenzeichen
MySQL stellt die folgenden Rechenoperatoren zur Verfügung
Operator | Name | Beispiel |
---|---|---|
+ | Zusatz | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6,0 SELECT 3.5+2; -> 5,5 |
- | Subtraktion | SELECT 3-5; -> -2 |
* | Multiplikation | SELECT 3 * 5; -> 15 |
/ | Einteilung | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3.1416 SELECT 10.0 / 0; -> NULL |
DIV | Integer Division | SELECT 5 DIV 2; -> 2 |
% oder 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
Wenn die Zahlen in Ihrer Arithmetik alle Ganzzahlen sind, verwendet MySQL den BIGINT
(64-Bit-Vorzeichen) für seine Arbeit. Zum Beispiel:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1,152,921,504,606,846,977
und
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
außerhalb des BIGINT
Bereichs)
DOPPELT
Wenn die Zahlen in Ihrer Arithmetik gebrochen sind, verwendet MySQL die 64-Bit-Gleitkomma-Arithmetik nach IEEE 754 . Bei der Verwendung der Fließkomma-Arithmetik müssen Sie vorsichtig sein, da viele Fließkommazahlen von Natur aus eher Näherungswerte als genaue Werte sind .
Mathematische Konstanten
Pi
Im Folgenden wird der Wert von PI
mit 6 Dezimalstellen zurückgegeben. Der tatsächliche Wert ist gut zu DOUBLE
;
SELECT PI(); -> 3.141593
Trigonometrie (SIN, COS)
Winkel sind in Radiant, nicht in Grad. Alle Berechnungen werden in einem 64-Bit-Fließkomma nach IEEE 754 durchgeführt . Alle Gleitkommaberechnungen unterliegen kleinen Fehlern, die als Maschinenfehler (Epsilon) bezeichnet werden . Versuchen Sie daher nicht, sie auf Gleichheit zu vergleichen. Es gibt keine Möglichkeit, diese Fehler bei der Verwendung von Gleitkommazahlen zu vermeiden. Sie sind in die Technologie eingebaut.
Wenn Sie in trigonometrischen Berechnungen DECIMAL
Werte verwenden, werden diese implizit in Fließkommazahlen und dann wieder in Dezimalzahlen konvertiert.
Sinus
Gibt den Sinus einer Zahl X in Radiant zurück
SELECT SIN(PI()); -> 1.2246063538224e-16
Kosinus
Gibt den Cosinus von X zurück, wenn X im Bogenmaß angegeben wird
SELECT COS(PI()); -> -1
Tangente
Gibt den Tangens einer Zahl X in Bogenmaß zurück. Beachten Sie, dass das Ergebnis sehr nahe bei Null liegt, aber nicht genau Null. Dies ist ein Beispiel für eine Maschine ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arc Cosine (inverser Cosinus)
Gibt den Arcuskosinus von X zurück, wenn X im Bereich von -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Arc Sinus (inverser Sinus)
Gibt den Arcussinus von X zurück, wenn X im Bereich von -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Bogentangens (inverser Tangens)
ATAN(x)
gibt den Arkustangens einer einzelnen Zahl zurück.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
gibt den Arcustangens der beiden Variablen X und Y zurück. Sie ähnelt der Berechnung des Arcustangens von Y / X. Sie ist jedoch numerisch robuster: t funktioniert korrekt, wenn X nahe null ist und die Vorzeichen Beide Argumente werden verwendet, um den Quadranten des Ergebnisses zu bestimmen.
Es ATAN()
, Formeln so zu schreiben, dass ATAN2()
anstelle von ATAN()
wo immer dies möglich ist.
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
Kotangens
Gibt den Kotangens von X zurück
SELECT COT(12); -> -1.5726734063977
Umwandlung
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Rundung (RUNDE, FLOOR, CEIL)
Runden Sie eine Dezimalzahl auf einen ganzzahligen Wert
Für genaue numerische Werte (z. B. DECIMAL
): Wenn die erste Dezimalstelle einer Zahl 5 oder höher ist, rundet diese Funktion eine Zahl auf die nächste Ganzzahl von Null . Wenn diese Dezimalstelle 4 oder niedriger ist, wird diese Funktion auf den nächsten ganzzahligen Wert gerundet, der dem Wert Null am nächsten liegt.
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
Für ungefähre numerische Werte (z. B. DOUBLE
): Das Ergebnis der Funktion ROUND()
hängt von der C-Bibliothek ab. Bei vielen Systemen bedeutet dies, dass ROUND()
die Runde zur nächsten geraden Regel verwendet:
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Runden Sie eine Zahl auf
Zum CEIL()
einer Nummer verwenden Sie entweder die Funktion CEIL()
oder CEILING()
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Eine Zahl abrunden
Um eine Zahl FLOOR()
, verwenden Sie die Funktion FLOOR()
SELECT FLOOR(1.99) -> 1
FLOOR und CEIL gehen in Richtung auf / von der Unendlichkeit weg:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Runden Sie eine Dezimalzahl auf eine bestimmte Anzahl von Dezimalstellen.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
Die Diskussion von Auf und Ab und "5" gilt ebenfalls.
Erhöhe eine Zahl auf eine Potenz (POW)
Um eine Zahl x
auf eine Potenz y
zu erhöhen, verwenden Sie entweder die Funktionen POW()
oder POWER()
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Quadratwurzel (SQRT)
Verwenden Sie die SQRT()
Funktion. Wenn die Zahl negativ ist, wird NULL
zurückgegeben
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Zufallszahlen (RAND)
Erzeugen Sie eine Zufallszahl
Verwenden Sie die Funktion RAND()
um eine pseudozufällige Gleitkommazahl zwischen 0
und 1
zu generieren
Angenommen, Sie haben die folgende Abfrage
SELECT i, RAND() FROM t;
Dies wird so etwas zurückgeben
ich | RAND () |
---|---|
1 | 0,6191438870682 |
2 | 0,93845168309142 |
3 | 0,83482678498591 |
Zufallszahl in einem Bereich
Um eine Zufallszahl im Bereich a <= n <= b zu generieren, können Sie die folgende Formel verwenden
FLOOR(a + RAND() * (b - a + 1))
Beispielsweise wird eine Zufallszahl zwischen 7 und 12 generiert
SELECT FLOOR(7 + (RAND() * 6));
Eine einfache Möglichkeit, die Zeilen in einer Tabelle zufällig zurückzugeben:
SELECT * FROM tbl ORDER BY RAND();
Dies sind Pseudozufallszahlen .
Der Pseudozufallszahlengenerator in MySQL ist nicht kryptographisch sicher. Wenn Sie also MySQL verwenden, um Zufallszahlen zu generieren, die als Geheimnisse verwendet werden sollen, kann ein entschlossener Gegner, der weiß, dass Sie MySQL verwendet haben, Ihre Geheimnisse leichter erraten, als Sie vielleicht glauben.
Absolutwert und Vorzeichen (ABS, SIGN)
Liefert den absoluten Wert einer Zahl
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
Das sign
einer Zahl vergleicht sie mit 0.
Zeichen | Ergebnis | Beispiel |
---|---|---|
-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