Все математические функции в случае ошибки возвращают 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 -
LN(X)Возвращает натуральный логарифм числа
X:mysql> SELECT LN(2); -> 0.693147 mysql> SELECT LN(-2); -> NULLЭта функция появилась в MySQL 4.0.3. Это синоним
LOG(X). -
LOG(B, X)Если вызывается с одним параметром, возвращает натуральный логарифм числа
X:mysql> SELECT LOG(2); -> 0.693147 mysql> SELECT LOG(-2); -> NULLЕсли вызывается с двумя параметрами, функция возвращает логарифм числа
Xпо базеB:mysql> SELECT LOG(2,65536); -> 16.000000 mysql> SELECT LOG(1,100); -> NULLОпция указания базы логарифма появилась в MySQL 4.0.3.
LOG(B,X)эквалиентноLOG(X)/LOG(B). -
LOG2(X)Возвращает логарифм числа
Xпо базе 2:mysql> SELECT LOG2(65536); -> 16.000000 mysql> SELECT LOG2(-100); -> NULLФункция
LOG2()полезна с тем, чтобы узнать, сколько бит число потребует для хранения. Эта функция добавлена в MySQL 4.0.3. В более старых версиях вызывайте вместо нее:LOG(X)/LOG(2) -
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()Возвращает значение числа "пи". По умолчанию представлено 5 десятичных знаков, но в MySQL для представления числа "пи" при внутренних вычислениях используется полная двойная точность.
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<d ORDER BY RAND() LIMIT 1000. Следует учитывать, что операторRAND()в выраженииWHEREпри выполнении выраженияWHEREбудет вычисляться каждый раз заново. ОператорRAND()не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL. -
LEAST(X,Y,...)Если задано два или более аргументов, возвращает наименьший (с минимальным значением) аргумент. Сравнение аргументов происходит по следующим правилам:
Если возвращаемая величина используется в целочисленном контексте (
INTEGER), или все аргументы являются целочисленными, то они сравниваются как целые числа.Если возвращаемая величина используется в контексте действительных чисел (
REAL) или все аргументы являются действительными числами, то они сравниваются как числа типаREAL.Если один из аргументов является зависимой от регистра строкой, то данные аргументы сравниваются с учетом регистра.
В остальных случаях аргументы сравниваются как строки, независимые от регистра.
mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST("B","A","C"); -> "A"В версиях MySQL до 3.22.5 можно использовать MIN() вместо LEAST.
-
GREATEST(X,Y,...)Возвращает наибольший (с максимальным значением) аргумент. Сравнение аргументов происходит по тем же правилам, что и для
LEAST:mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> 767.0 mysql> SELECT GREATEST("B","A","C"); -> "C"В версиях MySQL до 3.22.5 можно использовать
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 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9Начиная с MySQL 3.23.51 все числа округляются к нулю.
Если
D- негативное, то тогда вся часть числа обнуляется:mysql> SELECT TRUNCATE(122,-2); -> 100Следует учитывать, что обычно в компьютерах десятичные числа хранятся не так, как целые, а как числа двойной точности с плавающим десятичным знаком (
DOUBLE). Поэтому иногда результат может вводить в заблуждение, как в следующем примере:mysql> SELECT TRUNCATE(10.28*100,0); -> 1027Это происходит потому, что в действительности
10,28хранится как нечто вроде10,2799999999999999.