Spec-Zone .ru
спецификации, руководства, описания, API
|
Таблица 12.3. Операторы сравнения
Имя | Описание |
---|---|
BETWEEN
... AND ... |
Проверьте, является ли значение в пределах диапазона значений |
COALESCE()
|
Возвратите первый НЕНУЛЕВОЙ параметр |
<=>
|
НУЛЕВОЙ БЕЗОПАСНЫЙ равный оператору |
=
|
Равный оператор |
>= |
Больше чем или равный оператор |
> |
Больше чем оператор |
GREATEST()
|
Возвратите самый большой параметр |
IN()
|
Проверьте, является ли значение в пределах ряда значений |
INTERVAL()
|
Возвратите индексирование параметра, который является меньше чем первый параметр |
IS
NOT NULL |
Тест значения NOT NULL |
IS
NOT |
Протестируйте значение против булева |
IS
NULL |
Тест нулевого значения |
IS |
Протестируйте значение против булева |
ISNULL() |
Тест, является ли параметром НУЛЬ |
LEAST() |
Возвратите самый маленький параметр |
<= |
Меньше чем или равный оператор |
< |
Меньше чем оператор |
LIKE |
Простое сопоставление с образцом |
NOT
BETWEEN ... AND ... |
Проверьте, не является ли значение в пределах диапазона значений |
!= , <> |
Не равный оператор |
NOT
IN() |
Проверьте, не является ли значение в пределах ряда значений |
NOT
LIKE |
Отрицание простого сопоставления с образцом |
STRCMP() |
Сравните две строки |
Операции сравнения приводят к значению 1
(TRUE
), 0
(FALSE
), или NULL
. Эти
операции работают и на числа и на строки. Строки автоматически преобразовываются в числа и числа к строкам по
мере необходимости.
Следующие реляционные операторы сравнения могут использоваться, чтобы сравнить не только скалярные операнды, но и операнды строки:
= > < >= <= <> !=
Для примеров сравнений строки см. Раздел 13.2.10.5, "Подзапросы Строки".
Некоторые из функций в этом разделе возвращаемые значения кроме 1
(TRUE
), 0
(FALSE
), или NULL
. Например, LEAST()
и GREATEST()
. Однако, значение, которое они возвращают, основано на операциях
сравнения, выполняемых согласно правилам, описанным в Разделе
12.2, "Преобразование типов в Вычислении выражения".
Чтобы преобразовать значение в определенный тип в целях сравнения, можно использовать CAST()
функция. Строковые значения могут быть преобразованы в различное
использование набора символов CONVERT()
.
См. Раздел
12.10, "Функции броска и Операторы".
По умолчанию сравнения строк не являются чувствительными к регистру и используют текущий набор символов.
Значение по умолчанию latin1
(cp1252 западноевропеец), который также работает
хорошо на английский язык.
Равный:
mysql>SELECT 1 = 0;
-> 0mysql>SELECT '0' = 0;
-> 1mysql>SELECT '0.0' = 0;
-> 1mysql>SELECT '0.01' = 0;
-> 0mysql>SELECT '.01' = 0.01;
-> 1
NULL
- безопасный равный. Этот оператор выполняет сравнение равенства как
=
оператор, но
возвраты 1
вместо NULL
если оба операнда
NULL
, и 0
вместо NULL
если один операнд NULL
.
mysql>SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0mysql>SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
Не равный:
mysql>SELECT '.01' <> '0.01';
-> 1mysql>SELECT .01 <> '0.01';
-> 0mysql>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
Тестирует значение против булева значения, где boolean_value
может быть TRUE
,
FALSE
, или UNKNOWN
.
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL
IS UNKNOWN;
-> 1, 1, 1
Тестирует значение против булева значения, где boolean_value
может быть TRUE
,
FALSE
, или UNKNOWN
.
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT
UNKNOWN, NULL IS NOT UNKNOWN;
-> 1, 1, 0
Тесты, является ли значение NULL
.
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL
IS NULL;
-> 0, 0, 1
Чтобы
работать хорошо с программами ODBC, MySQL поддерживает следующие дополнительные функции при
использовании IS
NULL
:
Если sql_auto_is_null
переменная устанавливается в 1, тогда после
оператора, который успешно вставляет автоматически сгенерированный AUTO_INCREMENT
значение, можно найти что значение, делая заявление следующей формы:
SELECT * FROMtbl_name
WHEREauto_col
IS NULL
Если оператор возвращает строку, возвращенное значение является тем же самым, как будто
Вы вызвали LAST_INSERT_ID()
функция. Для получения
дополнительной информации включая возвращаемое значение после многократной строки
вставьте, видьте Раздел 12.14, "информационные
Функции". Если нет AUTO_INCREMENT
значение
было успешно вставлено, SELECT
оператор не возвращает строки.
Поведение получения AUTO_INCREMENT
значение при
использовании IS NULL
сравнение может быть отключено, устанавливая
sql_auto_is_null = 0
. См. Раздел
5.1.4, "Системные Переменные Сервера".
Значение по умолчанию sql_auto_is_null
0 в MySQL 5.7.
Для DATE
и DATETIME
столбцы, которые объявляются как NOT NULL
, можно найти специальную дату '0000-00-00'
при использовании оператора как это:
SELECT * FROMtbl_name
WHEREdate_column
IS NULL
Это необходимо, чтобы заставить некоторые приложения ODBC работать, потому что ODBC не
поддерживает a '0000-00-00'
значение даты.
См. Раздел 21.1.7.1.1, "Получая
Автоинкрементные Значения", и описание для FLAG_AUTO_IS_NULL
опция в Разделе 21.1.4.2,
"Параметры Соединения Соединителя/ODBC".
Тесты, не является ли значение NULL
.
mysql> SELECT 1 IS NOT NULL, 0 IS NOT
NULL, NULL IS NOT NULL;
-> 1, 1, 0
Если expr
больше чем или равен min
и expr
меньше чем или равно max
, BETWEEN
возвраты 1
, иначе это
возвращается 0
. Это эквивалентно выражению (
если все параметры имеют тот же самый тип.
Иначе преобразование типов имеет место согласно правилам, описанным в Разделе
12.2, "Преобразование типов в Вычислении выражения", но применялся ко всем этим
трем параметрам. min
<= expr
AND expr
<= max
)
mysql>SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;
-> 1, 0mysql>SELECT 1 BETWEEN 2 AND 3;
-> 0mysql>SELECT 'b' BETWEEN 'a' AND 'c';
-> 1mysql>SELECT 2 BETWEEN 2 AND '3';
-> 1mysql>SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
Для лучших результатов при использовании BETWEEN
с датой или временными стоимостями, использовать CAST()
явно
преобразовать значения в требуемый тип данных. Примеры: Если Вы сравниваете a DATETIME
к два DATE
значения, преобразуйте DATE
значения к DATETIME
значения. Если Вы используете строковую константу такой
как '2001-1-1'
в сравнении с a DATE
, бросьте строку к a DATE
.
Это - то же самое как NOT (
. expr
BETWEEN min
AND max
)
Возвращает первое не -NULL
значение в списке, или NULL
если есть не не -NULL
значения.
mysql>SELECT COALESCE(NULL,1);
-> 1mysql>SELECT COALESCE(NULL,NULL,NULL);
-> NULL
С двумя или больше параметрами, возвращает самый большой (оцененный максимуму) параметр. Параметры
сравниваются, используя те же самые правила что касается LEAST()
.
mysql>SELECT GREATEST(2,0);
-> 2mysql>SELECT GREATEST(34.0,3.0,5.0,767.0);
-> 767.0mysql>SELECT GREATEST('B','A','C');
-> 'C'
GREATEST()
возвраты NULL
если какой-либо параметр NULL
.
Возвраты 1
если expr
равно
любому из значений в IN
список, еще возвраты 0
. Если все значения являются константами, они оцениваются согласно
типу expr
и сортированный. Поиск элемента тогда делается,
используя двоичный поиск. Это означает IN
очень быстро если IN
список значения состоит полностью из констант. Иначе,
преобразование типов имеет место согласно правилам, описанным в Разделе
12.2, "Преобразование типов в Вычислении выражения", но применялся ко всем
параметрам.
mysql>SELECT 2 IN (0,3,5,7);
-> 0mysql>SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
Никогда недопустимо смешивать заключенные в кавычки и закрывшие кавычки значения в IN
перечислите, потому что правила сравнения для заключенных в кавычки
значений (таких как строки) и закрывали кавычки отличаются, значения (такие как числа). Смешивание
типов может поэтому привести к непоследовательным результатам. Например, не пишите IN
выражение как это:
SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
Вместо этого запишите это как это:
SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
Число значений в IN
список только ограничивается max_allowed_packet
значение.
Выполнить стандарт SQL, IN
возвраты NULL
не только если выражение на левой стороне NULL
, но также и если никакое
соответствие не находится в списке, и одно из выражений в списке NULL
.
IN()
синтаксис может также использоваться, чтобы записать определенные
типы подзапросов. См. Раздел 13.2.10.3,
"Подзапросы с ANY
, IN
, или SOME
".
Это - то же самое как NOT (
. expr
IN (value
,...))
Если expr
NULL
, ISNULL()
возвраты 1
, иначе это возвращается 0
.
mysql>SELECT ISNULL(1+1);
-> 0mysql>SELECT ISNULL(1/0);
-> 1
ISNULL()
может
использоваться вместо =
протестировать, является ли значение NULL
. (Сравнение значения к NULL
использование =
всегда ложь урожаев.)
ISNULL()
функционируйте совместно использует некоторые специальные поведения с IS NULL
оператор сравнения. См. описание IS NULL
.
Возвраты 0
если N
< N1
, 1
если N
< N2
и так
далее или -1
если N
NULL
. Все параметры обрабатываются как целые числа. Это требуется это
N1
< N2
<
N3
< ...
< Nn
для этой функции, чтобы работать правильно. Это -
то, потому что двоичный поиск используется (очень быстро).
mysql>SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3mysql>SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2mysql>SELECT INTERVAL(22, 23, 30, 44, 200);
-> 0
С двумя или больше параметрами, возвращает самый маленький (оцененный минимуму) параметр. Параметры сравниваются, используя следующие правила:
Если какой-либо параметр NULL
, результат
NULL
. Никакое сравнение не необходимо.
Если возвращаемое значение используется в INTEGER
контекст или все параметры оцениваются целому числу,
они сравниваются как целые числа.
Если возвращаемое значение используется в a REAL
контекст или все параметры оцениваются вещественному
числу, они сравниваются как вещественные числа.
Если параметры включают соединение чисел и строк, они сравниваются как числа.
Если каким-либо параметром является недвоичная (символьная) строка, параметры сравниваются как недвоичные строки.
Во всех других случаях параметры сравниваются как двоичные строки.
mysql>SELECT LEAST(2,0);
-> 0mysql>SELECT LEAST(34.0,3.0,5.0,767.0);
-> 3.0mysql>SELECT LEAST('B','A','C');
-> 'A'
Отметьте, что предыдущие правила преобразования могут привести к странным результатам в некоторых промежуточных случаях:
mysql> SELECT CAST(LEAST(3600,
9223372036854775808.0) as SIGNED);
-> -9223372036854775808
Это происходит, потому что MySQL читает 9223372036854775808.0
в
целочисленном контексте. Целочисленное представление не достаточно хорошо, чтобы содержать значение,
таким образом, это переносится к целому числу со знаком.