Все математические функции в случае ошибки возвращают NULL
.
-
mysql> SELECT - 2;Необходимо учитывать, что если этот оператор используется с данными типа
-> -2
BIGINT
, возвращаемое значение также будет иметь типBIGINT
! Это означает, что следует избегать использования оператора для целых чисел, которые могут иметь величину -2^63
!ABS(X)
X
:mysql> SELECT ABS(2);Эту функцию можно уверенно применять для величин типа
-> 2
mysql> SELECT ABS(-32);
-> 32
BIGINT
.SIGN(X)
-1
, 0
или 1
, в зависимости от того, является ли X
отрицательным, нулем или положительным:mysql> SELECT SIGN(-32);
-> -1
mysql> SELECT SIGN(0);
-> 0
mysql> SELECT SIGN(234);
-> 1
MOD(N,M)
%
%
в C). Возвращает остаток от деления N
на M
:mysql> SELECT MOD(234, 10);Эту функцию можно уверенно применять для величин типа
-> 4
mysql> SELECT 253 % 7;
-> 1
mysql> SELECT MOD(29,9);
-> 2
BIGINT
.FLOOR(X)
X
:mysql> SELECT FLOOR(1.23);Следует учитывать, что возвращаемая величина преобразуется в
-> 1
mysql> SELECT FLOOR(-1.23);
-> -2
BIGINT
!CEILING(X)
X
:mysql> SELECT CEILING(1.23);Следует учитывать, что возвращаемая величина преобразуется в
-> 2
mysql> SELECT CEILING(-1.23);
-> -1
BIGINT
!ROUND(X)
X
, округленный до ближайшего целого числа:mysql> SELECT ROUND(-1.23);Следует учитывать, что поведение функции
-> -1
mysql> SELECT ROUND(-1.58);
-> -2
mysql> SELECT ROUND(1.58);
-> 2
ROUND()
при значении аргумента, равном середине между двумя целыми числами, зависит от конкретной реализации библиотеки C. Округление может выполняться: к ближайшему четному числу, всегда к ближайшему большему, всегда к ближайшему меньшему, всегда быть направленным к нулю. Чтобы округление всегда происходило только в одном направлении, необходимо использовать вместо данной хорошо определенные функции, такие как TRUNCATE()
или FLOOR()
.ROUND(X,D)
X
, округленный до числа с D
десятичными знаками. Если D
равно 0
, результат будет представлен без десятичного знака или дробной части:mysql> SELECT ROUND(1.298, 1);
-> 1.3
mysql> SELECT ROUND(1.298, 0);
-> 1
EXP(X)
e
(основа натуральных логарифмов), возведенное в степень X
:mysql> SELECT EXP(2);
-> 7.389056
mysql> SELECT EXP(-2);
-> 0.135335
LOG(X)
X
:mysql> SELECT LOG(2);Чтобы получить логарифм числа
-> 0.693147
mysql> SELECT LOG(-2);
-> NULL
X
для произвольной основы логарифмов B
, следует использовать формулу LOG(X)/LOG(B)
.LOG10(X)
X
:mysql> SELECT LOG10(2);
-> 0.301030
mysql> SELECT LOG10(100);
-> 2.000000
mysql> SELECT LOG10(-100);
-> NULL
POW(X,Y)
POWER(X,Y)
X
, возведенное в степень Y
:mysql> SELECT POW(2,2);
-> 4.000000
mysql> SELECT POW(2,-2);
-> 0.250000
SQRT(X)
X
:mysql> SELECT SQRT(4);
-> 2.000000
mysql> SELECT SQRT(20);
-> 4.472136
PI()
mysql> SELECT PI();
-> 3.141593
mysql> SELECT PI()+0.000000000000000000;
-> 3.141592653589793116
COS(X)
X
, где X
задается в радианах:mysql> SELECT COS(PI());
-> -1.000000
SIN(X)
X
, где X
задается в радианах:mysql> SELECT SIN(PI());
-> 0.000000
TAN(X)
X
, где X
задается в радианах:mysql> SELECT TAN(PI()+1);
-> 1.557408
ACOS(X)
X
, т.е. величину, косинус которой равен X
. Если X
не находится в диапазоне от -1
до 1
, возвращает NULL
:mysql> SELECT ACOS(1);
-> 0.000000
mysql> SELECT ACOS(1.0001);
-> NULL
mysql> SELECT ACOS(0);
-> 1.570796
ASIN(X)
X
, т.е. величину, синус которой равен X
. Если X
не находится в диапазоне от -1
до 1
, возвращает NULL
:mysql> SELECT ASIN(0.2);
-> 0.201358
mysql> SELECT ASIN('foo');
-> 0.000000
ATAN(X)
X
, т.е. величину, тангенс которой равен X
:mysql> SELECT ATAN(2);
-> 1.107149
mysql> SELECT ATAN(-2);
-> -1.107149
ATAN(Y,X)
ATAN2(Y,X)
X
и Y
. Вычисление производится так же, как и вычисление арктангенса Y / X
, за исключением того, что знаки обоих аргументов используются для определения квадранта результата:mysql> SELECT ATAN(-2,2);
-> -0.785398
mysql> SELECT ATAN2(PI(),0);
-> 1.570796
COT(X)
X
:mysql> SELECT COT(12);
-> -1.57267341
mysql> SELECT COT(0);
-> NULL
RAND()
RAND(N)
0
до 1,0
. Если целочисленный аргумент N
указан, то он используется как начальное значение этой величины:mysql> SELECT RAND();В выражениях вида
-> 0.9233482386203
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND();
-> 0.63553050033332
mysql> SELECT RAND();
-> 0.70100469486881
ORDER BY
не следует использовать столбец с величинами RAND()
, поскольку применение оператора ORDER BY
приведет к многократным вычислениям в этом столбце. В версии MySQL 3.23 можно, однако, выполнить следующий оператор: SELECT * FROM table_name ORDER BY RAND()
: он полезен для получения случайного экземпляра из множества SELECT * FROM table1,table2 WHERE a=b AND c. Следует учитывать, что оператор RAND()
в выражении WHERE
при выполнении выражения WHERE
будет вычисляться каждый раз заново. Оператор RAND()
не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL.
LEAST(X,Y,...)
INTEGER
), или все аргументы являются целочисленными, то они сравниваются как целые числа.REAL
) или все аргументы являются действительными числами, то они сравниваются как числа типа REAL
.mysql> SELECT LEAST(2,0);В версиях MySQL до 3.22.5 можно использовать MIN() вместо LEAST.
-> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
-> 3.0
mysql> SELECT LEAST(B,A,C);
-> A
GREATEST(X,Y,...)
LEAST
:mysql> SELECT GREATEST(2,0);В версиях MySQL до 3.22.5 можно использовать
-> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
-> 767.0
mysql> SELECT GREATEST(B,A,C);
-> C
MAX()
вместо GREATEST
.DEGREES(X)
X
, преобразованный из радианов в градусы:mysql> SELECT DEGREES(PI());
-> 180.000000
RADIANS(X)
X
, преобразованный из градусов в радианы:mysql> SELECT RADIANS(90);
-> 1.570796
TRUNCATE(X,D)
X
, усеченное до D
десятичных знаков. Если D
равно 0
, результат будет представлен без десятичного знака или дробной части:mysql> SELECT TRUNCATE(1.223,1);Следует учитывать, что обычно в компьютерах десятичные числа хранятся не так, как целые, а как числа двойной точности с плавающим десятичным знаком (
-> 1.2
mysql> SELECT TRUNCATE(1.999,1);
-> 1.9
mysql> SELECT TRUNCATE(1.999,0);
-> 1
DOUBLE
). Поэтому иногда результат может вводить в заблуждение, как в следующем примере:mysql> SELECT TRUNCATE(10.28*100,0);Это происходит потому, что в действительности
-> 1027
10,28
хранится как нечто вроде 10,2799999999999999
.Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.