6.3.1.1 Круглые скобки | Оглавление | 6.3.1.3 Логические операторы |
Операторы сравнения дают в результате величину 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
<=>
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 section 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
min
и
меньше или равна заданному значению max
, то функция BETWEEN
возвращает 1
,
в противном случае - 0
. Это эквивалентно выражению (min <= expr AND expr
<= max
), в котором все аргументы представлены одним и тем же типом данных.
Способ выполнения сравнения определяется первым аргументом (expr
):
expr
представляет собой столбец типа TIMESTAMP
, DATE
или
DATETIME
, а величины MIN()
и MAX()
являются константами, то последние
приводятся к тому же формату, что и столбец.
expr
является независимым от регистра символов строковым
выражением, то производится сравнение строк без учета регистра.
expr
является зависимым от регистра символов строковым
выражением, то производится сравнение строк с учетом регистра.
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
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 "; -> 1
6.3.1.1 Круглые скобки | Оглавление | 6.3.1.3 Логические операторы |