Числовые функции
Арифметические операции
В MySQL можно применять обычные арифметические операторы. Следует иметь в виду, что если оба аргумента являются целыми числами, то при использовании операторов '-', '+' и '*' результат вычисляется с точностью BIGINT (64 бита). Если один из аргументов - беззнаковое целое число, а второй аргумент - также целое число, то результат будет беззнаковым целым числом. См.раздел Функции приведения типов.
+
Сложение:
mysql> SELECT 3+5; -> 8
-
Вычитание:
mysql> SELECT 3-5; -> -2
*
Умножение:
mysql> SELECT 3*5; -> 15
mysql> SELECT 18014398509481984*18014398509481984.0; -> 324518553658426726783156020576256.0
mysql> SELECT 18014398509481984*18014398509481984; -> 0
В последнем выражении мы получим неверный результат, так как произведение умножения целых чисел выходит за границы 64-битового диапазона для вычислений с точностью BIGINT .
/
Деление:
mysql> SELECT 3/5; -> 0.60
Деление на ноль приводит к результату NULL :
mysql> SELECT 102/(1-1); -> NULL
Деление будет выполняться по правилам BIGINT -арифметики только в случае, если эта операция представлена в контексте, где ее результат преобразуется в INTEGER !
Математические функции
Все математические функции в случае ошибки возвращают 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. Следует учитывать, что оператор 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 .
1 2 3 4 5 6
8 8 8
| |