Поиск…


замечания

MySQL, на большинстве машин, использует 64-разрядную арифметику с плавающей точкой IEEE 754 для своих вычислений.

В целых контекстах используется целочисленная арифметика.

  • RAND() не является идеальным генератором случайных чисел. Он в основном используется для быстрого генерации псевдослучайных чисел

Арифметические операторы

MySQL предоставляет следующие арифметические операторы

оператор название пример
+ прибавление SELECT 3+5; -> 8
SELECT 3.5+2.5; -> 6.0
SELECT 3.5+2; -> 5,5
- Вычитание SELECT 3-5; -> -2
* умножение SELECT 3 * 5; -> 15
/ разделение SELECT 20 / 4; -> 5
SELECT 355 / 113; -> 3,1416
SELECT 10.0 / 0; -> NULL
DIV Целостный отдел SELECT 5 DIV 2; -> 2
% или MOD Модульное 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

Если числа в вашей арифметике являются целыми числами, MySQL использует тип данных BIGINT (подписанный 64-разрядный) для выполнения своей работы. Например:

select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1 -> 1,152,921,504,606,846,977

а также

select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024 -> Ошибка BIGINT вне диапазона

DOUBLE

Если какие-либо цифры в вашей арифметике являются дробными, MySQL использует 64-битную арифметику с плавающей точкой IEEE 754 . Вы должны быть осторожны при использовании арифметики с плавающей запятой, поскольку многие числа с плавающей запятой являются, по сути, приблизительными, а не точными значениями .

Математические константы

число Пи

Следующее возвращает значение PI отформатированное до 6 знаков после запятой. Фактическое значение хорошее для DOUBLE ;

SELECT PI();    -> 3.141593

Тригонометрия (SIN, COS)

Углы находятся в радианах, а не в градусах. Все вычисления выполняются в 64-битной плавающей точке IEEE 754 . Все вычисления с плавающей точкой подвержены небольшим ошибкам, известным как ошибки машины ε (epsilon) , поэтому не пытайтесь сравнивать их для равенства. Невозможно избежать этих ошибок при использовании с плавающей запятой; они встроены в технологию.

Если вы используете значения DECIMAL в тригонометрических вычислениях, они неявно преобразуются в с плавающей запятой, а затем обратно в десятичные.

Синус

Возвращает синус числа X, выраженного в радианах

SELECT SIN(PI()); -> 1.2246063538224e-16

Косинус

Возвращает косинус X, когда X задан в радианах

SELECT COS(PI()); -> -1

касательный

Возвращает тангенс числа X, выраженного в радианах. Обратите внимание, что результат очень близок к нулю, но не точно равен нулю. Это пример машины ε.

SELECT TAN(PI());   -> -1.2246063538224e-16

Arc Cosine (обратный косинус)

Возвращает дуговый косинус X, если X находится в диапазоне от -1 to 1

SELECT ACOS(1);    -> 0
SELECT ACOS(1.01); -> NULL

Дуга Синус (обратный синус)

Возвращает синус дуги X, если X находится в диапазоне от -1 to 1

SELECT ASIN(0.2); -> 0.20135792079033

Дуга Тангенс (обратная касательная)

ATAN(x) возвращает тангенс дуги одного числа.

SELECT ATAN(2); -> 1.1071487177941

ATAN2(X, Y) возвращает тангенс дуги двух переменных X и Y. Он аналогичен вычислению дуги тангенса Y / X. Но он численно более устойчив: t правильно работает, когда X близок к нулю, а знаки обоих аргументов используются для определения квадранта результата.

Лучшая практика предлагает писать формулы для использования ATAN2() а не 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

Котангенс

Возвращает котангенс X

SELECT COT(12); -> -1.5726734063977

преобразование

SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180

Округление (ROUND, FLOOR, CEIL)

Округлить десятичное число до целочисленного значения

Для точных числовых значений (например, DECIMAL ): если первое десятичное число числа равно 5 или выше, эта функция будет округлять число до следующего целого числа от нуля . Если это десятичное место равно 4 или ниже, эта функция будет округляться до следующего целого значения, ближайшего к нулю .

SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5

Для приблизительных числовых значений (например, DOUBLE ): результат функции ROUND() зависит от библиотеки C; на многих системах это означает, что ROUND() использует округление до ближайшего четного правила:

SELECT ROUND(45e-1) -> 4  -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6  -- The nearest even value is 6

Завершить номер

Для округления числа используйте CEIL() или CEILING()

SELECT CEIL(1.23)    -> 2
SELECT CEILING(4.83) -> 5

Завершить число

Чтобы округлить число, используйте функцию FLOOR()

SELECT FLOOR(1.99) -> 1

FLOOR и CEIL идут в сторону / от -infinity:

SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1

Закруглить десятичное число на указанное число знаков после запятой.

SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200

Также обсуждается обсуждение «против» и «5».

Поднимите число до мощности (POW)

Чтобы поднять число x до мощности y , используйте либо функции POW() либо POWER()

SELECT POW(2,2); => 4
SELECT POW(4,2); => 16

Квадратный корень (SQRT)

Используйте функцию SQRT() . Если число отрицательное, возвращается NULL

SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL

Случайные числа (RAND)

Создать случайное число

Чтобы создать псевдослучайное число с плавающей запятой между 0 и 1 , используйте функцию RAND()

Предположим, у вас есть следующий запрос

SELECT i, RAND() FROM t;

Это вернет что-то вроде этого

я RAND ()
1 +0,6191438870682
2 +0,93845168309142
3 +0,83482678498591

Случайное число в диапазоне

Чтобы создать случайное число в диапазоне a <= n <= b, вы можете использовать следующую формулу

FLOOR(a + RAND() * (b - a + 1))

Например, это приведет к случайному числу от 7 до 12

SELECT FLOOR(7 + (RAND() * 6));

Простой способ случайного возврата строк в таблицу:

SELECT * FROM tbl ORDER BY RAND();

Это псевдослучайные числа.

Генератор псевдослучайных чисел в MySQL не является криптографически безопасным. То есть, если вы используете MySQL для генерации случайных чисел, которые будут использоваться в качестве секретов, определенный противник, который знает, что вы использовали MySQL, сможет угадать ваши секреты легче, чем вы могли бы поверить.

Абсолютная ценность и знак (ABS, SIGN)

Вернуть абсолютное значение числа

SELECT ABS(2);   -> 2
SELECT ABS(-46); -> 46

sign числа сравнивает его с 0.

Знак Результат пример
-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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow