12.6.2 Математические функции
Таблица 12.10 Математические функции
| Имя | Описание |
|---|---|
ABS() | Возвращает абсолютное значение |
ACOS() | Возвращает арккосинус |
ASIN() | Возвращает арксинус |
ATAN() | Возвращает арктангенс |
ATAN2(), ATAN() | Возвращает арктангенс от двух аргументов |
CEIL() | Возвращает наименьшее целое значение, не меньшее, чем аргумент |
CEILING() | Возвращает наименьшее целое значение, не меньшее, чем аргумент |
CONV() | Преобразует числа между различными системами счисления |
COS() | Возвращает косинус |
COT() | Возвращает котангенс |
CRC32() | Вычисляет значение контрольной суммы CRC32 |
DEGREES() | Преобразует радианы в градусы |
EXP() | Возводит в степень |
FLOOR() | Возвращает наибольшее целое значение, не большее, чем аргумент |
LN() | Возвращает натуральный логарифм аргумента |
LOG() | Возвращает натуральный логарифм первого аргумента |
LOG10() | Возвращает логарифм по основанию 10 аргумента |
LOG2() | Возвращает логарифм по основанию 2 аргумента |
MOD() | Возвращает остаток от деления |
PI() | Возвращает значение числа пи |
POW() | Возвращает аргумент, возведённый в указанную степень |
POWER() | Возвращает аргумент, возведённый в указанную степень |
RADIANS() | Возвращает значение аргумента, преобразованного в радианы |
RAND() | Возвращает случайное значение с плавающей точкой |
ROUND() | Округляет аргумент |
SIGN() | Возвращает знак аргумента |
SIN() | Возвращает синус аргумента |
SQRT() | Возвращает квадратный корень из аргумента |
TAN() | Возвращает тангенс аргумента |
TRUNCATE() | Отрезает до указанного числа десятичных знаков |
Во всех случаях ошибок математические функции возвращают NULL.
-
Возвращает абсолютное значение
X, илиNULL, еслиXравноNULL.Тип результата определяется типом аргумента. Следствием этого является то, что
ABS(-9223372036854775808)вызывает ошибку, так как результат не может быть сохранён в знаковойBIGINTпеременной.mysql>
SELECT ABS(2);-> 2 mysql>SELECT ABS(-32);-> 32Эта функция безопасна для использования со значениями
BIGINT. -
Возвращает арккосинус
X, то есть значение, косинус которого равенX. ВозвращаетNULL, еслиXне находится в диапазоне от-1до1.mysql>
SELECT ACOS(1);-> 0 mysql>SELECT ACOS(1.0001);-> NULL mysql>SELECT ACOS(0);-> 1.5707963267949 -
Возвращает арксинус
X, то есть значение, синус которого равенX. ВозвращаетNULL, еслиXне находится в диапазоне от-1до1.mysql>
SELECT ASIN(0.2);-> 0.20135792079033 mysql>SELECT ASIN('foo');+-------------+ | ASIN('foo') | +-------------+ | 0 | +-------------+ 1 row in set, 1 warning (0.00 sec) mysql>SHOW WARNINGS;+---------+------+-----------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' | +---------+------+-----------------------------------------+ -
Возвращает арктангенс
X, то есть значение, тангенс которого равенX.mysql>
SELECT ATAN(2);-> 1.1071487177941 mysql>SELECT ATAN(-2);-> -1.1071487177941 -
Возвращает арктангенс двух переменных
XиY. Это похоже на вычисление арктангенса, за исключением того, что знаки обоих аргументов используются для определения квадранта результата.Y/Xmysql>
SELECT ATAN(-2,2);-> -0.78539816339745 mysql>SELECT ATAN2(PI(),0);-> 1.5707963267949 -
Возвращает наименьшее целое значение, не меньшее, чем
X.mysql>
SELECT CEILING(1.23);-> 2 mysql>SELECT CEILING(-1.23);-> -1Для числовых аргументов с точным значением возвращаемое значение имеет тип числового значения с точным значением. Для строковых или с плавающей точкой аргументов возвращаемое значение имеет тип с плавающей точкой.
-
Преобразует числа между различными системами счисления. Возвращает строковое представление числа
N, преобразованное из системы счисленияfrom_baseв систему счисленияto_base. ВозвращаетNULL, если какой-либо аргументNULL. АргументNинтерпретируется как целое число, но может быть указан как целое число или строка. Минимальная система счисления —2, максимальная —36. Еслиfrom_baseотрицательное число, тоNрассматривается как знаковая величина. В противном случаеNрассматривается как беззнаковое.CONV()работает с 64-битной точностью.mysql>
SELECT CONV('a',16,2);-> '1010' mysql>SELECT CONV('6E',18,8);-> '172' mysql>SELECT CONV(-17,10,-18);-> '-H' mysql>SELECT CONV(10+'10'+'10'+X'0a',10,10);-> '40' -
Возвращает косинус
X, гдеXзадано в радианах.mysql>
SELECT COS(PI());-> -1 -
Возвращает котангенс
X.mysql>
SELECT COT(12);-> -1.5726734063977 mysql>SELECT COT(0);-> out-of-range error -
Вычисляет значение контрольной суммы циклического избытка и возвращает 32-битовое беззнаковое значение. Результат —
NULL, если аргумент —NULL. Аргумент ожидается как строка и (при возможности) обрабатывается как строка, если им не является.mysql>
SELECT CRC32('MySQL');-> 3259397556 mysql>SELECT CRC32('mysql');-> 2501908538 -
Возвращает аргумент
X, преобразованный из радиан в градусы.mysql>
SELECT DEGREES(PI());-> 180 mysql>SELECT DEGREES(PI() / 2);-> 90 -
Возвращает значение e (основание натурального логарифма) в степени
X. Обратная функция —LOG()(только с одним аргументом) илиLN().mysql>
SELECT EXP(2);-> 7.3890560989307 mysql>SELECT EXP(-2);-> 0.13533528323661 mysql>SELECT EXP(0);-> 1 -
Возвращает наибольшее целое значение, не большее, чем
X.mysql>
SELECT FLOOR(1.23), FLOOR(-1.23);-> 1, -2Для числовых аргументов с точным значением возвращаемое значение имеет тип числового значения с точным значением. Для строковых или с плавающей точкой аргументов возвращаемое значение имеет тип с плавающей точкой.
-
Форматирует число
Xв формате, подобном'#,###,###.##', округленное доDзнаков после запятой, и возвращает результат в виде строки. Подробности см. в Разделе 12.8, «Функции и операторы строк». -
Эта функция может быть использована для получения шестнадцатеричного представления десятичного числа или строки; способ, которым она это делает, зависит от типа аргумента. Подробности см. в описании этой функции в Разделе 12.8, «Функции и операторы строк».
-
Возвращает натуральный логарифм
X, то есть логарифм по основанию e отX. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Неверный аргумент для логарифма”.mysql>
SELECT LN(2);-> 0.69314718055995 mysql>SELECT LN(-2);-> NULLЭта функция является синонимом
LOG(. Обратная функция — функцияX)EXP(). -
Если вызвана с одним параметром, эта функция возвращает натуральный логарифм
X. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Неверный аргумент для логарифма”.Обратная функция (при вызове с одним аргументом) — функция
EXP().mysql>
SELECT LOG(2);-> 0.69314718055995 mysql>SELECT LOG(-2);-> NULLПри вызове с двумя параметрами эта функция возвращает логарифм
Xпо основаниюB. ЕслиXменьше или равно 0, или еслиBменьше или равно 1, то возвращаетсяNULL.mysql>
SELECT LOG(2,65536);-> 16 mysql>SELECT LOG(10,100);-> 2 mysql>SELECT LOG(1,100);-> NULLLOG(эквивалентнаB,X)LOG(.X) / LOG(B) -
Возвращает логарифм по основанию 2 от
. ЕслиXXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Неверный аргумент для логарифма”.mysql>
SELECT LOG2(65536);-> 16 mysql>SELECT LOG2(-100);-> NULLLOG2()полезна для определения того, сколько бит требуется для хранения числа. Эта функция эквивалентна выражениюLOG(.X) / LOG(2)
-
Возвращает десятичный логарифм от
X. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится сообщение об ошибке “Неверный аргумент для логарифма”.mysql>
SELECT LOG10(2);-> 0.30102999566398 mysql>SELECT LOG10(100);-> 2 mysql>SELECT LOG10(-100);-> NULL -
Операция взятия остатка от деления. Возвращает остаток от деления
NнаM.mysql>
SELECT MOD(234, 10);-> 4 mysql>SELECT 253 % 7;-> 1 mysql>SELECT MOD(29,9);-> 2 mysql>SELECT 29 MOD 9;-> 2Эта функция безопасна для использования с
BIGINTзначениями.MOD()также работает со значениями, имеющими дробную часть, и возвращает точный остаток после деления:mysql>
SELECT MOD(34.5,3);-> 1.5MOD(возвращаетN,0)NULL. -
Возвращает значение π (пи). По умолчанию отображается семь десятичных знаков, но MySQL использует полное значение двойной точности внутренне.
Поскольку возвращаемое значение этой функции является значением двойной точности, его точное представление может отличаться в разных платформах или реализациях. Это также относится к любым выражениям, использующим
PI(). См. Раздел 11.1.4 «Числа с плавающей точкой (приближённое значение) - FLOAT, DOUBLE».mysql>
SELECT PI();-> 3.141593 mysql>SELECT PI()+0.000000000000000000;-> 3.141592653589793000 -
Возвращает значение
Xв степениY.mysql>
SELECT POW(2,2);-> 4 mysql>SELECT POW(2,-2);-> 0.25 -
Это синоним для
POW(). -
Возвращает аргумент
X, преобразованный из градусов в радианы. (Обратите внимание, что π радиан равно 180 градусам.)mysql>
SELECT RADIANS(90);-> 1.5707963267949 -
Возвращает случайное число с плавающей точкой
vв диапазоне0<=v<1.0. Чтобы получить случайное целое числоRв диапазонеi<=R<j, используйте выражениеFLOOR(−i+ RAND() * (j. Например, чтобы получить случайное целое число в диапазонеi))7<=R<12, используйте следующее утверждение:SELECT FLOOR(7 + (RAND() * 5));
Если задан целочисленный аргумент
N, он используется в качестве значения начального состояния:При использовании константного аргумента начального состояния, состояние инициализируется один раз при подготовке оператора до его выполнения.
При использовании неконстантного аргумента начального состояния (например, имя столбца), состояние инициализируется для каждого вызова
RAND().
Следствием этого поведения является то, что для одинаковых значений аргументов
RAND(возвращает одно и то же значение каждый раз, и, следовательно, генерирует повторяющуюся последовательность значений столбцов. В следующем примере последовательность значений, генерируемыхN)RAND(3), одинакова в обоих местах её использования.mysql>
CREATE TABLE t (i INT);Query OK, 0 rows affected (0.42 sec) mysql>INSERT INTO t VALUES(1),(2),(3);Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql>SELECT i, RAND() FROM t;+------+------------------+ | i | RAND() | +------+------------------+ | 1 | 0.61914388706828 | | 2 | 0.93845168309142 | | 3 | 0.83482678498591 | +------+------------------+ 3 rows in set (0.00 sec) mysql>SELECT i, RAND(3) FROM t;+------+------------------+ | i | RAND(3) | +------+------------------+ | 1 | 0.90576975597606 | | 2 | 0.37307905813035 | | 3 | 0.14808605345719 | +------+------------------+ 3 rows in set (0.00 sec) mysql>SELECT i, RAND() FROM t;+------+------------------+ | i | RAND() | +------+------------------+ | 1 | 0.35877890638893 | | 2 | 0.28941420772058 | | 3 | 0.37073435016976 | +------+------------------+ 3 rows in set (0.00 sec) mysql>SELECT i, RAND(3) FROM t;+------+------------------+ | i | RAND(3) | +------+------------------+ | 1 | 0.90576975597606 | | 2 | 0.37307905813035 | | 3 | 0.14808605345719 | +------+------------------+ 3 rows in set (0.01 sec)RAND()в предложенииWHEREвычисляется для каждой строки (при выборе из одной таблицы) или комбинации строк (при выборе из соединения нескольких таблиц). Таким образом, для целей оптимизацииRAND()не является константой и не может использоваться для оптимизации индексов. Дополнительную информацию см. в Разделе 8.2.1.18 «Оптимизация вызова функции».Использование столбца со значениями
RAND()в предложенииORDER BYилиGROUP BYможет привести к непредсказуемым результатам, поскольку для любого из предложений выражениеRAND()может вычисляться несколько раз для одной и той же строки, каждый раз возвращая различный результат. Если целью является получение строк в случайном порядке, можно использовать такое утверждение:SELECT * FROM
tbl_nameORDER BY RAND();Для выбора случайной выборки из набора строк комбинируйте
ORDER BY RAND()сLIMIT:SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;
RAND()не предназначен для создания идеального генератора случайных чисел. Это быстрый способ генерации случайных чисел по требованию, который портативен между платформами для одной и той же версии MySQL.Эта функция небезопасна для репликации на основе операторов. Если вы используете эту функцию, когда
binlog_formatзадано значениемSTATEMENT, будет выведено сообщение об ошибке. -
Округляет аргумент
XдоDдесятичных знаков. Алгоритм округления зависит от типа данныхX.Dпо умолчанию равно 0, если не указано иное.Dможет быть отрицательным, чтобы вызвать округлениеDцифр слева от десятичной точки значенияXдо нуля. Максимальное абсолютное значение дляDравно 30; любые цифры, превышающие 30 (или -30), отбрасываются.mysql>
SELECT ROUND(-1.23);-> -1 mysql>SELECT ROUND(-1.58);-> -2 mysql>SELECT ROUND(1.58);-> 2 mysql>SELECT ROUND(1.298, 1);-> 1.3 mysql>SELECT ROUND(1.298, 0);-> 1 mysql>SELECT ROUND(23.298, -1);-> 20 mysql>SELECT ROUND(.12345678901234567890123456789012345, 35);-> 0.123456789012345678901234567890Возвращаемое значение имеет тот же тип, что и первый аргумент (предполагая, что это целое число, число с плавающей точкой или десятичное число). Это означает, что для целочисленного аргумента результат будет целым числом (без десятичных знаков):
mysql>
SELECT ROUND(150.000,2), ROUND(150,2);+------------------+--------------+ | ROUND(150.000,2) | ROUND(150,2) | +------------------+--------------+ | 150.00 | 150 | +------------------+--------------+ROUND()использует следующие правила в зависимости от типа первого аргумента:Для чисел с точным значением
ROUND()использует правило «округление до ближайшего целого числа». Значение с дробной частью 0,5 или больше округляется вверх до следующего целого числа, если положительно, или вниз до следующего целого числа, если отрицательно. (Другими словами, округляется от нуля.) Значение с дробной частью меньше 0,5 округляется вниз до следующего целого числа, если положительно, или вверх до следующего целого числа, если отрицательно.Для чисел с приближенным значением результат зависит от библиотеки C. На многих системах это означает, что
ROUND()использует правило «округление до ближайшего чётного целого числа»: значение с дробной частью ровно посередине между двумя целыми числами округляется до ближайшего чётного целого числа.
Следующий пример демонстрирует, как округление отличается для точных и приближенных значений:
mysql>
SELECT ROUND(2.5), ROUND(25E-1);+------------+--------------+ | ROUND(2.5) | ROUND(25E-1) | +------------+--------------+ | 3 | 2 | +------------+--------------+Дополнительную информацию см. в Разделе 12.21 «Точность математических вычислений».
-
Возвращает знак аргумента как
-1,0или1, в зависимости от того, является лиXотрицательным, нулевым или положительным.mysql>
SELECT SIGN(-32);-> -1 mysql>SELECT SIGN(0);-> 0 mysql>SELECT SIGN(234);-> 1 -
Возвращает синус от
X, гдеXзадано в радианах.mysql>
SELECT SIN(PI());-> 1.2246063538224e-16 mysql>SELECT ROUND(SIN(PI()));-> 0 -
Возвращает квадратный корень из неотрицательного числа
X.mysql>
SELECT SQRT(4);-> 2 mysql>SELECT SQRT(20);-> 4.4721359549996 mysql>SELECT SQRT(-16);-> NULL
-
Возвращает тангенс
X, гдеXзадано в радианах.mysql>
SELECT TAN(PI());-> -1.2246063538224e-16 mysql>SELECT TAN(PI()+1);-> 1.5574077246549 -
Возвращает число
X, усечённое доDдесятичных знаков. ЕслиDравно0, результат не имеет десятичной точки или дробной части.Dможет быть отрицательным, чтобы привести к обнулениюDцифр слева от десятичной точки значенияX.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>SELECT TRUNCATE(122,-2);-> 100 mysql>SELECT TRUNCATE(10.28*100,0);-> 1028Все числа округляются к нулю.
© 2025 Oracle
Licensed under the GPLv2 License.