Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции



страница1/6
Дата16.10.2012
Размер0.69 Mb.
ТипДокументы
  1   2   3   4   5   6
Функции, используемые в операторах SELECT и WHERE
1. Операторы и функции общего назначения

2. Строковые функции

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

4. Функции даты и времени

5. Функции приведения типов

6. Другие функции

7. Функции, используемые в операторах GROUP BY

В команде SQL выражение SELECT или определение WHERE могут включать в себя любое выражение, в котором используются описанные ниже функции.
Выражение, содержащее NULL, всегда будет давать в результате величину NULL, если иное не оговорено в документации для операторов и функций, задействованных в данном выражении.
Примечание: между именем функции и следующими за ним скобками не должно быть пробелов. Это поможет синтаксическому анализатору MySQL отличать вызовы функций от ссылок на таблицы или столбцы, имена которых случайно окажутся теми же, что и у функций. Однако допускаются пробелы до или после аргументов.
Если нужно, чтобы в MySQL допускались пробелы после имени функции, следует запустить mysqld с параметром --ansi или использовать CLIENT_IGNORE_SPACE в mysql_connect(), но в этом случае все имена функций станут зарезервированными словами. See Раздел 1.9.2, «Запуск MySQL в режиме ANSI».
В целях упрощения в данной документации результат выполнения программы mysql в примерах представлен в сокращенной форме. Таким образом вывод:
mysql> SELECT MOD(29,9);

1 rows in set (0.00 sec)
+-----------+

| mod(29,9) |

+-----------+

| 2 |

+-----------+
будет представлен следующим образом:
mysql> SELECT MOD(29,9);

-> 2
1. Операторы и функции общего назначения
1.1. Круглые скобки
( ... )
Круглые скобки используются для задания порядка вычислений в выражении. Например:
mysql> SELECT 1+2*3;

-> 7

mysql> SELECT (1+2)*3;

-> 9
1.2. Операторы сравнения
Операторы сравнения дают в результате величину 1 (истина, TRUE), 0 (ложь, FALSE) или NULL. Эти функции работают как с числами, так и со строками. Строки при необходимости автоматически преобразуются в числа, а числа - в строки (как в Perl).
Операции сравнения в MySQL выполняются по следующим правилам:
*
Если один или оба аргумента - NULL, то и результат сравнения будет NULL. Справедливо для всех операторов кроме <=>.

*
Если оба аргумента в операторе сравнения являются строками, то они сравниваются как строки.


*
Если оба аргумента - целые числа, то они сравниваются как целые числа.

*
Шестнадцатеричные величины, если они не сравниваются с числом, трактуются как строки с двоичными данными.

*
Если один из аргументов представляет собой столбец типа TIMESTAMP или DATETIME, а второй аргумент - константа, то константа перед выполнением сравнения преобразуется к типу TIMESTAMP. Это сделано для лучшей совместимости с ODBC.

*
Во всех других случаях аргументы сравниваются как действительные числа с плавающей точкой.
По умолчанию сравнение строк производится без учета регистра символов с использованием текущего набора символов (по умолчанию ISO-8859-1 Latin1, который, к тому же, прекрасно подходит для английского языка).
Ниже приведены примеры, иллюстрирующие преобразование строк в числа для операторов сравнения:
mysql> SELECT 1 > '6x';

-> 0

mysql> SELECT 7 > '6x';

-> 1

mysql> SELECT 0 > 'x6';

-> 0

mysql> SELECT 0 = 'x6';

-> 1
*
=
Равно:
mysql> SELECT 1 = 0;

-> 0

mysql> SELECT '0' = 0;

-> 1

mysql> SELECT '0.0' = 0;

-> 1

mysql> SELECT '0.01' = 0;

-> 0

mysql> SELECT '.01' = 0.01;

-> 1
*
<> , !=
Не равно:
mysql> SELECT '.01' <> '0.01';

-> 1

mysql> SELECT .01 <> '0.01';

-> 0

mysql> SELECT 'zapp' <> 'zappp';

-> 1
*
<=
Меньше или равно:
mysql> SELECT 0.1 <= 2;

-> 1
*
<
Меньше чем:
mysql> SELECT 2 < 2;

-> 0
*
>=
Больше или равно:
mysql> SELECT 2 >= 2;

-> 1
*
>
Больше чем:
mysql> SELECT 2 > 2;

-> 0
*
<=>
NULL-безопасное сравнение (равно):
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;

-> 1 1 0
*
IS NULL , IS NOT NULL
Тест для определения, является величина равной NULL или нет:
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;

-> 0 0 1

mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;

-> 1 1 0
Для того, чтобы MySQL хорошо работал с другими программами, обеспечивается поддержка следующих дополнительных возможностей для функции IS NULL:
o
Можно найти последнюю вставленную строку, используя выражение:
SELECT * FROM tbl_name WHERE auto_col IS NULL
Это свойство можно блокировать установкой SQL_AUTO_IS_NULL=0. See Раздел 5.5.6, «Синтаксис команды SET».

o
Для данных типа NOT NULL DATE и столбцов DATETIME можно найти особую дату 0000-00-00, используя выражение:
SELECT * FROM tbl_name WHERE date_column IS NULL
Это необходимо для работы некоторых приложений ODBC (так как ODBC не поддерживает значение даты 0000-00-00).
*
expr BETWEEN min AND max
Если величина выражения expr больше или равна заданному значению min и меньше или равна заданному значению max, то функция BETWEEN возвращает 1, в противном случае - 0. Это эквивалентно выражению (min <= expr AND expr <= max), в котором все аргументы представлены одним и тем же типом данных. В противном случае имеет место быть преобразование типов так, как сказано выше, но применительно ко всем трем аргументами. Внимание: до 4.0.5 аргументы приводились к типу expr.
mysql> SELECT 1 BETWEEN 2 AND 3;

-> 0

mysql> SELECT 'b' BETWEEN 'a' AND 'c';

-> 1

mysql> SELECT 2 BETWEEN 2 AND '3';

-> 1

mysql> SELECT 2 BETWEEN 2 AND 'x-3';

-> 0
*
expr NOT BETWEEN min AND max
То же справедливо и для функции NOT (expr BETWEEN min AND max).

*
expr IN (value,...)
Возвращает 1, если выражение expr равно любой величине из списка IN, иначе - 0. Если все величины - константы, то они оцениваются в соответствии с типом выражения expr и сортируются. Поиск элемента в этом случае производится методом логического поиска. Это означает, что функция IN является очень быстрой, если список значений IN состоит полностью из констант. Если expr является зависимым от регистра строковым выражением, то сравнение строк производится с учетом регистра:
mysql> SELECT 2 IN (0,3,5,'wefwf');

-> 0

mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');

-> 1
Начиная с 4.1 (в соответствии со стандартом SQL-99), IN возвращает NULL не только если выражение в левой части является NULL, но также если не найдено соответствия в списке и одно из выражений в списке является величиной NULL.

*
expr NOT IN (value,...)
То же справедливо и для функции NOT (expr IN (value,...)).

*
ISNULL(expr)
Если expr равно NULL, то ISNULL() возвращает 1, в противном случае - 0:
mysql> SELECT ISNULL(1+1);

-> 0

mysql> SELECT ISNULL(1/0);

-> 1
Обратите внимание: при сравнении величин NULL с использованием оператора = всегда будет возвращаться значение FALSE!
*
COALESCE(list)
Возвращает первый в списке элемент со значением, не равным NULL:
mysql> SELECT COALESCE(NULL,1);

-> 1

mysql> SELECT COALESCE(NULL,NULL,NULL);

-> NULL
*
INTERVAL(N,N1,N2,N3,...)
Возвращает 0, если N < N1, и 1, если N < N2, и так далее. Все аргументы трактуются как целые числа. Для корректной работы этой функции необходимо условие N1 < N2 < N3 < ... < Nn. Это обусловлено тем, что используется логический поиск (очень быстрый):
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);

-> 3

mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);

-> 2

mysql> SELECT INTERVAL(22, 23, 30, 44, 200);

-> 0
Если регистронезависимая строка сравнивается с помощью любого стандартного оператора (=, <>, ..., но не LIKE), то конечные пустые символы (т.е. пробелы, табуляторы и переводы строк) игнорируются: игнорируется.
mysql> SELECT "a" ="A \n";

-> 1
1.3. Логические операторы
В SQL, все логические операторы возвращают TRUE (ИСТИНА), FALSE (ЛОЖЬ) или NULL (UNKNOWN, неизвестно). В MySQL это реализовано как 1 (TRUE, ИСТИНА), 0 (FALSE, ЛОЖЬ) или NULL. Это справедливо для большинства SQL СУБД, однако некоторые возвращают любое положительное значение как значение TRUE.
*
NOT , !
Логическое НЕ. Возвращает 1, если операнд равен 0, 0 если операнд - ненулевая величина, и NOT NULL возвращает NULL.
mysql> SELECT NOT 10;

-> 0

mysql> SELECT NOT 0;

-> 1

mysql> SELECT NOT NULL;

-> NULL

mysql> SELECT ! (1+1);

-> 0

mysql> SELECT ! 1+1;

-> 1
Последний пример дает 1, поскольку данное выражение вычисляется тем же способом, что и (!1)+1.
*
AND , &&
Логическое И. Дает 1 если все операнды ненулевые и не NULL, 0 если один или более операндов равны 0, или NULL в остальных случаях.
mysql> SELECT 1 && 1;

-> 1

mysql> SELECT 1 && 0;

-> 0

mysql> SELECT 1 && NULL;

-> NULL

mysql> SELECT 0 && NULL;

-> 0

mysql> SELECT NULL && 0;

-> 0
Обратите внимание, что версии MySQL до 4.0.5 прекращали вычисление, встретив первый NULL, вместо того, чтобы продолжать вычисление выражений с целью нахождения возможных значений 0. Это означает, что в этих версиях выражение SELECT (NULL AND 0) возвращает NULL вместо 0. В 4.0.5 код был переписан так, чтобы оптимизация сохранилась, но результат всегда был таков, как требует того ANSI.
*
OR , ||
Логическое ИЛИ. Возвращает 1, если любой из операндов не 0, NULL если один из операндов NULL, в остальных случаях возвращает 0.
mysql> SELECT 1 || 1;

-> 1

mysql> SELECT 1 || 0;

-> 1

mysql> SELECT 0 || 0;

-> 0

mysql> SELECT 0 || NULL;

-> NULL

mysql> SELECT 1 || NULL;

-> 1
*
XOR
Логический XOR (побитовое сложение по модулю 2) Возвращает NULL если любой из операндов - NULL. Для не-NULL операндов, возвращает 1 если нечетное количество операндов - не 0.
mysql> SELECT 1 XOR 1;

-> 0

mysql> SELECT 1 XOR 0;

-> 1

mysql> SELECT 1 XOR NULL;

-> NULL

mysql> SELECT 1 XOR 1 XOR 1;

-> 1
a XOR b математически эквалиентно (a AND (NOT b)) OR ((NOT a) and b).
XOR был реализован в 4.0.2.
1.4. Функции потока управления программой
*
IFNULL(expr1,expr2)
Если expr1 не равно NULL, то функция IFNULL() возвращает значение expr1, в противном случае - expr2. В зависимости от контекста функция IFNULL() может возвращать либо числовое, либо строковое значение:
mysql> SELECT IFNULL(1,0);

-> 1

mysql> SELECT IFNULL(NULL,10);

-> 10

mysql> SELECT IFNULL(1/0,10);

-> 10

mysql> SELECT IFNULL(1/0,'yes');

-> 'yes'
В 4.0.6 и раньше по умолчанию возвращал для IFNULL(expr1,expr2) более "общее" из двух выражений в порядке STRING, REAL или INTEGER. Разница с более ранними версиями MySQL больше всего заметна тогда, когда вы создаете таблицу, основанную на выражении или MySQL внутренне сохраняет величину, основанную на выражении IFNULL() во временной таблице.
CREATE TABLE foo SELECT IFNULL(1,"test") as test;
В 4.0.6 тип для столбца "test" - CHAR(4) в то время как на более ранних типом был бы BIGINT.

*
NULLIF(expr1,expr2)
Если выражение expr1 = expr2 истинно, то возвращает NULL, в противном случае - expr1. Эквивалентна оператору CASE WHEN x = y THEN NULL ELSE x END:
mysql> SELECT NULLIF(1,1);

-> NULL

mysql> SELECT NULLIF(1,2);

-> 1
Отметим, что если аргументы не равны, то величина expr1 вычисляется в MySQL дважды.

*
IF(expr1,expr2,expr3)
Если expr1 равно значению ИСТИНА (expr1 <> 0 и expr1 <> NULL), то функция IF() возвращает expr2, в противном случае - expr3. В зависимости от контекста функция IF() может возвращать либо числовое, либо строковое значение:
mysql> SELECT IF(1>2,2,3);

-> 3

mysql> SELECT IF(1<2,'yes','no');

-> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

-> 'no'
Если expr2 или expr3 являются NULL тогда результирующим типом IF() будет тип, который не есть NULL. Это нововведение в MySQL 4.0.3.
expr1 вычисляется как целое число; это означает, что при исследовании чисел с плавающей точкой или строковых величин в этой функции необходимо использовать операцию сравнения:
mysql> SELECT IF(0.1,1,0);

-> 0

mysql> SELECT IF(0.1<>0,1,0);

-> 1
В первом случае из приведенных выше функция IF(0.1) возвращает 0, так как 0.1 преобразуется в целое число и в результате выполняется функция IF(0). Но это вовсе не то, что должно было бы получиться. Во втором случае исходная величина с плавающей точкой исследуется при помощи оператора сравнения, чтобы определить, является ли она ненулевой, и в качестве аргумента функции используется результат сравнения - целое число. В версии MySQL 3.23 возвращаемый по умолчанию тип функции IF() (это может иметь значение при сохранении его во временной таблице) вычисляется, как показано ниже:

Выражение Возвращаемая величина

expr2 или expr3 возвращает строку строка

expr2 or expr3 возвращает величину с плавающей точкой с плавающей точкой

expr2 or expr3 возвращает целое число целое число
Если expr2 и expr3 являются строками, и обе регистро-независимы, то и результат является регистро-независимым (начиная с 3.23.51).

*
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END , CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
В первом варианте возвращается значение result, если value=compare-value. Во втором - результат для первого указанного условия condition, если оно истинно. Если соответствующая величина результата не определена, то возвращается значение result, указанное после оператора ELSE. Если часть ELSE в выражении отсутствует, возвращается NULL:
mysql> SELECT CASE 1 WHEN 1 THEN "one"

WHEN 2 THEN "two" ELSE "more" END;

-> "one"

mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;

-> "true"

mysql> SELECT CASE BINARY "B" WHEN "a" THEN 1 WHEN "b" THEN 2 END;

-> NULL
Тип возвращаемой величины будет такой же (INTEGER, DOUBLE или STRING), как и у первой возвращаемой величины (выражение после первого оператора THEN).
  1   2   3   4   5   6

Похожие:

Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconМатематические функции 2 Строковые функции 2
Символ *, стоящий перед идентификатором, говорит о том, что идентификатор является процедурой
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconПеречень утвержден на заседании кафедры математики и информатики сф башГУ
Понятие функции. Числовые функции. График функции. Способы задания функций. Четные и нечетные функции. Периодические функции
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconУрок по теме «График квадратичной функции»
Эти сведения используются при изучении свойств квадратичной функции общего вида. Важно, чтобы учащиеся понимали, что график функции...
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconI. Неопределенный интеграл
На основании формулы при этом решается задача нахождения дифференциала функции. Рассмотрим теперь обратные операции, осуществляющие...
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconСписок вопросов к теоретической части экзамена по математике гр. 1/30, 31, 32, 33 семестр 2 учебный год 2011/2012 Модуль Функции нескольких переменных /6 часов
Определение функции нескольких переменных. Геометрическое изображение функции двух переменных. Частное и полное приращение функции....
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconДзета-функция Римана
В курсе высшей математики круг известных функций значительно расширяется. Сюда добавляются интегральные и гиперболические функции,...
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconЛекция №6 Дифференциальное исчисление функции одной переменной План Непрерывность функции Понятие производной
При рассмотрении графика такой функции мы видим, что близким значениям аргумента соответствуют близкие значения функции. Если независимая...
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconФакультет
Отображения множеств. Счетные и несчетные множества. Функции множества. Мера множества. Измеримые множества и функции. Интеграл Лебега....
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции icon«Предел функции»
Число называется пределом функции в предельной точке, если значения функции неограниченно приближаются к числу, при всех значениях,...
Функции, используемые в операторах select и where операторы и функции общего назначения Строковые функции iconТема предел функции
Число называется пределом функции в предельной точке, если значения функции неограниченно приближаются к числу, при всех значениях,...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org