14.6.2 Математические функции
Таблица 14.10 Математические функции
| Имя | Описание |
|---|---|
ABS() | Возвращает абсолютное значение |
ACOS() | Возвращает обратный косинус |
ASIN() | Возвращает обратный синус |
ATAN() | Возвращает обратную тангенс |
ATAN2(), ATAN() | Возвращает обратную тангенс от двух аргументов |
CEIL() | Возвращает наименьшее целое число, не меньшее, чем аргумент |
CEILING() | Возвращает наименьшее целое число, не меньшее, чем аргумент |
CONV() | Преобразует числа между различными системами счисления |
COS() | Возвращает косинус |
COT() | Возвращает котангенс |
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, или еслиXявляетсяNULL.mysql>
SELECT ACOS(1);-> 0 mysql>SELECT ACOS(1.0001);-> NULL mysql>SELECT ACOS(0);-> 1.5707963267949 -
Возвращает арксинус
X, то есть значение, синус которого равенX. ВозвращаетNULL, еслиXне находится в диапазоне от-1до1, или еслиXявляетсяNULL.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. ВозвращаетNULL, еслиXявляетсяNULLmysql>
SELECT ATAN(2);-> 1.1071487177941 mysql>SELECT ATAN(-2);-> -1.1071487177941 -
Возвращает арктангенс двух переменных
XиY. Это аналогично вычислению арктангенса, за исключением того, что знаки обоих аргументов используются для определения квадранта результата. ВозвращаетY/XNULL, еслиXилиYявляетсяNULL.mysql>
SELECT ATAN(-2,2);-> -0.78539816339745 mysql>SELECT ATAN2(PI(),0);-> 1.5707963267949 -
Возвращает наименьшее целое значение, не меньшее, чем
X. ВозвращаетNULL, еслиXявляетсяNULL.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-битной точностью.CONV()возвращаетNULL, если любой из его аргументов являетсяNULL.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задан в радианах. ВозвращаетNULL, еслиXявляетсяNULL.mysql>
SELECT COS(PI());-> -1 -
Возвращает котангенс
X. ВозвращаетNULL, еслиXявляетсяNULL.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, преобразованный из радианов в градусы. ВозвращаетNULL, еслиXявляетсяNULL.mysql>
SELECT DEGREES(PI());-> 180 mysql>SELECT DEGREES(PI() / 2);-> 90 -
Возвращает значение e (основание натуральных логарифмов), возведенное в степень
X. Обратной функцией являетсяLOG()(используя только один аргумент) илиLN().Если
XявляетсяNULL, эта функция возвращаетNULL.mysql>
SELECT EXP(2);-> 7.3890560989307 mysql>SELECT EXP(-2);-> 0.13533528323661 mysql>SELECT EXP(0);-> 1 -
Возвращает наибольшее целое значение, не большее, чем
X. ВозвращаетNULL, еслиXявляетсяNULL.mysql>
SELECT FLOOR(1.23), FLOOR(-1.23);-> 1, -2Для числовых аргументов с точным значением возвращаемое значение имеет числовой тип с точным значением. Для строковых или вещественных аргументов возвращаемое значение имеет тип с плавающей точкой.
-
Форматирует число
Xв формат, подобный'#,###,###.##', округленное доDдесятичных знаков, и возвращает результат в виде строки. Подробнее см. Раздел 14.8, «Строковые функции и операторы». -
Эта функция может использоваться для получения шестнадцатеричного представления десятичного числа или строки; способ, которым она это делает, варьируется в зависимости от типа аргумента. Подробности см. в описании этой функции в Разделе 14.8, «Строковые функции и операторы».
-
Возвращает натуральный логарифм
X; то есть логарифм по основанию e отX. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Неверный аргумент для логарифма”. ВозвращаетNULL, еслиXявляетсяNULL.mysql>
SELECT LN(2);-> 0.69314718055995 mysql>SELECT LN(-2);-> NULLЭта функция является синонимом
LOG(. Обратной функцией является функцияX)EXP().
-
Если функция вызывается с одним параметром, она возвращает натуральный логарифм
X. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Некорректный аргумент для логарифма”. ВозвращаетNULL, еслиXилиBравны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и выводится предупреждение “Некорректный аргумент для логарифма”. ВозвращаетNULL, еслиXравноNULL.mysql>
SELECT LOG2(65536);-> 16 mysql>SELECT LOG2(-100);-> NULLLOG2()полезна для определения количества битов, необходимых для хранения числа. Эта функция эквивалентна выражениюLOG(.X) / LOG(2) -
Возвращает логарифм по основанию 10 от
X. ЕслиXменьше или равно 0.0E0, функция возвращаетNULLи выводится предупреждение “Некорректный аргумент для логарифма”. ВозвращаетNULL, еслиXравноNULL.mysql>
SELECT LOG10(2);-> 0.30102999566398 mysql>SELECT LOG10(100);-> 2 mysql>SELECT LOG10(-100);-> NULL -
Операция modulo. Возвращает остаток от деления
NнаM. ВозвращаетNULL, еслиMилиNравноNULL.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(). См. Раздел 13.1.4, “Типы с плавающей точкой (приближенное значение) - FLOAT, DOUBLE”.mysql>
SELECT PI();-> 3.141593 mysql>SELECT PI()+0.000000000000000000;-> 3.141592653589793000 -
Возвращает значение
Xв степениY. ВозвращаетNULL, еслиXилиYравноNULL.mysql>
SELECT POW(2,2);-> 4 mysql>SELECT POW(2,-2);-> 0.25 -
Это синоним для
POW(). -
Возвращает аргумент
X, преобразованный из градусов в радианы. (Обратите внимание, что π радиан равно 180 градусам.) ВозвращаетNULL, еслиXравноNULL.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()не является постоянным значением и не может использоваться для оптимизации индексов. Дополнительную информацию см. в Разделе 10.2.1.20, “Оптимизация вызова функций”.Использование столбца со значениями
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) усекаются. ЕслиXилиDравныNULL, функция возвращаетNULL.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Значение возврата имеет тот же тип, что и первый аргумент (предполагается, что это целое число, double или decimal). Это означает, что для целочисленного аргумента результат является целым числом (без десятичных знаков):
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 | +------------+--------------+Для получения дополнительной информации, см. Раздел 14.24, «Точность вычислений».
Тип данных, возвращаемый
ROUND()(иTRUNCATE()), определяется в соответствии с приведенными здесь правилами:Когда первый аргумент является целого типа, тип возвращаемого значения всегда
BIGINT.Когда первый аргумент является типа с плавающей точкой или любого не числового типа, тип возвращаемого значения всегда
DOUBLE.Когда первый аргумент является значением
DECIMAL, тип возврата такжеDECIMAL.-
Атрибуты типа для возвращаемого значения также копируются из первого аргумента, за исключением случая
DECIMAL, когда второй аргумент имеет константное значение.Когда желаемое количество знаков после запятой меньше масштаба аргумента, масштаб и точность результата корректируются соответственно.
Кроме того, для
ROUND()(но не для функцииTRUNCATE()) точность увеличивается на один разряд для размещения округления, которое увеличивает количество значащих цифр. Если второй аргумент отрицательный, тип возврата корректируется таким образом, что его масштаб равен 0, с соответствующей точностью. Например,ROUND(99.999, 2)возвращает100.00— первый аргумент являетсяDECIMAL(5, 3), а тип возврата являетсяDECIMAL(5, 2).Если второй аргумент отрицательный, тип возврата имеет масштаб 0 и соответствующую точность;
ROUND(99.999, -1)возвращает100, что являетсяDECIMAL(3, 0).
-
Возвращает знак аргумента как
-1,0или1, в зависимости от того, является лиXотрицательным, нулевым или положительным. ВозвращаетNULL, еслиXравноNULL.mysql>
SELECT SIGN(-32);-> -1 mysql>SELECT SIGN(0);-> 0 mysql>SELECT SIGN(234);-> 1 -
Возвращает синус
X, гдеXзадано в радианах. ВозвращаетNULL, еслиXравноNULL.mysql>
SELECT SIN(PI());-> 1.2246063538224e-16 mysql>SELECT ROUND(SIN(PI()));-> 0 -
Возвращает квадратный корень из неотрицательного числа
X. ЕслиXравноNULL, функция возвращаетNULL.mysql>
SELECT SQRT(4);-> 2 mysql>SELECT SQRT(20);-> 4.4721359549996 mysql>SELECT SQRT(-16);-> NULL -
Возвращает тангенс
X, гдеXзадано в радианах. ВозвращаетNULL, еслиXравноNULL.mysql>
SELECT TAN(PI());-> -1.2246063538224e-16 mysql>SELECT TAN(PI()+1);-> 1.5574077246549 -
Возвращает число
X, усечённое доDзнаков после запятой. ЕслиDравно0, результат не имеет десятичной точки или дробной части.Dможет быть отрицательным, чтобы привести к обнулениюDцифр слева от десятичной точки значенияX. ЕслиXилиDравныNULL, функция возвращаетNULL.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Все числа округляются к нулю.
Тип данных, возвращаемый
TRUNCATE(), следует тем же правилам, что определяют тип возвращаемого значения функцииROUND(); для получения подробной информации см. описание функцииROUND().
© 2025 Oracle
Licensed under the GPLv2 License.