MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQL6.3.3.2 Математические функции
6.3.3.2 Математические функции
Все математические функции в случае ошибки возвращают 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()
-
Возвращает значение числа "пи". По умолчанию представлено 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
Следует учитывать, что обычно в компьютерах десятичные числа хранятся не
так, как целые, а как числа двойной точности с плавающим десятичным знаком
(DOUBLE ). Поэтому иногда результат может вводить в заблуждение, как в
следующем примере:
mysql> SELECT TRUNCATE(10.28*100,0);
-> 1027
Это происходит потому, что в действительности 10,28 хранится как нечто
вроде 10,2799999999999999 .
|