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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow