Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Справочник по языку MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Функции, используемые в операторах SELECT и WHERE (часть 1) - Программирование от RIN.RU
Функции, используемые в операторах SELECT и WHERE (часть 1)



Числовые функции




Арифметические операции


В 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  Обсудить в чате

8  В тему

Структура языка

Типы данных столбцов

Функции, используемые в операторах SELECT и WHERE (часть 2)

Обработка данных: SELECT, INSERT, UPDATE, DELETE

Определение данных: CREATE, DROP, ALTER

Основные команды пользовательских программ MySQL

Команды управления транзакциями и блокировками в MySQL

Полнотекстовый поиск в MySQL

Кэш запросов в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь