Операторы сравнения дают в результате величину 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:-
Можно найти последнюю вставленную строку, используя выражение:
SELECT * FROM tbl_name WHERE auto_col IS NULL
Это свойство можно блокировать установкой
SQL_AUTO_IS_NULL=0. See Раздел 5.5.6, «Синтаксис командыSET». -
Для данных типа
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