MySQL
арифметика
Поиск…
замечания
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