MySQL
Arytmetyka
Szukaj…
Uwagi
MySQL, na większości komputerów, używa 64-bitowej arytmetyki zmiennoprzecinkowej IEEE 754 do swoich obliczeń.
W kontekstach całkowitych używa arytmetyki liczb całkowitych.
-
RAND()
nie jest idealnym generatorem liczb losowych. Służy głównie do szybkiego generowania liczb pseudolosowych
Operatory arytmetyczne
MySQL zapewnia następujące operatory arytmetyczne
Operator | Nazwa | Przykład |
---|---|---|
+ | Dodanie | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6.0 SELECT 3.5+2; -> 5,5 |
- | Odejmowanie | SELECT 3-5; -> -2 |
* | Mnożenie | SELECT 3 * 5; -> 15 |
/ | Podział | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3,1416 SELECT 10.0 / 0; -> NULL |
DIV | Division Integer | SELECT 5 DIV 2; -> 2 |
% lub 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 |
DUŻY
Jeśli wszystkie liczby w arytmetyce są liczbami całkowitymi, MySQL używa typu danych BIGINT
(ze BIGINT
64-bitowym) do wykonania swojej pracy. Na przykład:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1,152,921,504,606,846,977
i
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
błąd poza zakresem
PODWÓJNIE
Jeśli dowolne liczby w Twojej arytmetyce są ułamkowe, MySQL używa 64-bitowej arytmetyki zmiennoprzecinkowej IEEE 754 . Należy zachować ostrożność podczas korzystania z arytmetyki zmiennoprzecinkowej, ponieważ wiele liczb zmiennoprzecinkowych jest z natury przybliżeniem, a nie dokładną wartością .
Stałe matematyczne
Liczba Pi
Poniższy zwraca wartość PI
sformatowaną z dokładnością do 6 miejsc po przecinku. Rzeczywista wartość jest DOUBLE
;
SELECT PI(); -> 3.141593
Trygonometria (SIN, COS)
Kąty są w radianach, a nie stopniach. Wszystkie obliczenia są wykonywane w 64-bitowym zmiennoprzecinkowym IEEE 754 . Wszystkie obliczenia zmiennoprzecinkowe są obarczone małymi błędami, znanymi jako błędy maszynowe ε (epsilon) , więc unikaj ich porównywania pod kątem równości. Nie ma sposobu na uniknięcie tych błędów podczas używania zmiennoprzecinkowego; są wbudowane w technologię.
Jeśli użyjesz wartości DECIMAL
w obliczeniach trygonometrycznych, zostaną one domyślnie przekonwertowane na zmiennoprzecinkowe, a następnie z powrotem na dziesiętne.
Sinus
Zwraca sinus liczby X wyrażonej w radianach
SELECT SIN(PI()); -> 1.2246063538224e-16
Cosinus
Zwraca cosinus X, gdy X podano w radianach
SELECT COS(PI()); -> -1
Tangens
Zwraca tangens liczby X wyrażonej w radianach. Zauważ, że wynik jest bardzo bliski zeru, ale nie dokładnie zero. To jest przykład maszyny ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arc Cosinus (odwrotny cosinus)
Zwraca arcus cosinus dla X, jeśli X jest w zakresie od -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Arc Sine (sinus odwrotny)
Zwraca sinus łukowy dla X, jeśli X jest w zakresie od -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Łukowa styczna (odwrotna styczna)
ATAN(x)
zwraca tangens łuku pojedynczej liczby.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
zwraca tangens łuku dwóch zmiennych X i Y. Jest podobny do obliczania stycznej łuku Y / X. Jest jednak bardziej solidny numerycznie: t działa poprawnie, gdy X jest bliskie zeru, a znaki obu argumentów służy do ustalenia ćwiartki wyniku.
Najlepsza praktyka sugeruje pisanie formuł, aby w miarę możliwości używać ATAN2()
zamiast ATAN()
.
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
Cotangens
Zwraca cotangens X
SELECT COT(12); -> -1.5726734063977
Konwersja
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Zaokrąglanie (OKRĄGŁY, PODŁOGOWY, CEIL)
Zaokrąglij liczbę dziesiętną do wartości całkowitej
Dla dokładnych wartości liczbowych (np. DECIMAL
): Jeśli pierwsze miejsce po przecinku liczby wynosi 5 lub więcej, funkcja zaokrągli liczbę do następnej liczby całkowitej od zera . Jeśli to miejsce po przecinku wynosi 4 lub mniej, funkcja zaokrągli się do następnej liczby całkowitej najbliższej zera .
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
Dla przybliżonych wartości liczbowych (np. DOUBLE
): Wynik funkcji ROUND()
zależy od biblioteki C; w wielu systemach oznacza to, że funkcja ROUND()
używa zaokrąglenia do najbliższej parzystej reguły:
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Zaokrąglij liczbę
Aby zaokrąglić liczbę, użyj funkcji CEIL()
lub CEILING()
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Zaokrąglić liczbę w dół
Aby zaokrąglić liczbę w dół, użyj funkcji FLOOR()
SELECT FLOOR(1.99) -> 1
PODŁOGA i CEIL idą w kierunku / od-nieskończoności:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Zaokrąglij liczbę dziesiętną do określonej liczby miejsc dziesiętnych.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
Dotyczy to również dyskusji w górę i w dół oraz „5”.
Podnieś liczbę do potęgi (POW)
Aby podnieść liczbę x
do potęgi y
, użyj funkcji POW()
lub POWER()
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Pierwiastek kwadratowy (SQRT)
Użyj funkcji SQRT()
. Jeśli liczba jest ujemna, NULL
zostanie zwrócona
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Liczby losowe (RAND)
Wygeneruj liczbę losową
Aby wygenerować pseudolosową liczbę zmiennoprzecinkową między 0
a 1
, użyj funkcji RAND()
Załóżmy, że masz następujące zapytanie
SELECT i, RAND() FROM t;
To zwróci coś takiego
ja | SKRAJ() |
---|---|
1 | 0,6191438870682 |
2) | 0,93845168309142 |
3) | 0,83482678498591 |
Liczba losowa w zakresie
Aby wygenerować liczbę losową z zakresu a <= n <= b, możesz użyć następującej formuły
FLOOR(a + RAND() * (b - a + 1))
Na przykład wygeneruje to liczbę losową z przedziału od 7 do 12
SELECT FLOOR(7 + (RAND() * 6));
Prosty sposób losowego zwracania wierszy w tabeli:
SELECT * FROM tbl ORDER BY RAND();
Są to liczby pseudolosowe .
Generator liczb pseudolosowych w MySQL nie jest bezpieczny kryptograficznie. Oznacza to, że jeśli użyjesz MySQL do generowania liczb losowych do wykorzystania jako tajemnice, zdeterminowany przeciwnik, który wie, że użyłeś MySQL, będzie mógł odgadnąć twoje tajemnice łatwiej, niż ci się wydaje.
Wartość bezwzględna i znak (ABS, ZNAK)
Zwraca wartość bezwzględną liczby
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
sign
liczby porównuje go do 0.
Znak | Wynik | Przykład |
---|---|---|
-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