Обычно если при выполнении сравнения строк одно из выражений является зависимым от регистра, то сравнение выполняется также с учетом регистра.
expr LIKE pat [ESCAPE 'escape-char']
Функция производит сравнение с шаблоном, используя операции сравнения простых регулярных выражений в SQL. Возвращает 1
(ИСТИНА) или 0
(ЛОЖЬ). Выражение LIKE
предусматривает использование следующих двух шаблонных символов в pat
:
Символ | Описание |
% | Соответствует любому количеству символов, даже нулевых |
_ | Соответствует ровно одному символу |
mysql> SELECT 'David!' LIKE 'David_';
-> 1
mysql> SELECT 'David!' LIKE '%D%v%';
-> 1
mysql> select TRUNCATE(-1.999,1);
-> -1.9
Начиная с MySQL 3.23.51 все числа округляются к нулю.
Если D
является негативным, то тогда вся часть числа округляется к нулю.
mysql> select truncate(122,-2);
-> 100
Если требуется исследовать литералы при помощи шаблонного символа, следует предварить шаблонный символ экранирующим символом. Если экранирующий символ конкретно не указывается, то подразумевается применение символа "\
":
Строка | Описание |
\% | Соответствует одному символу "% " |
\_ | Соответствует одному символу "_ " |
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
Для указания конкретного экранирующего символа используется выражение ESCAPE
:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
В следующих двух примерах показано, что сравнение строк производится с учетом регистра, если ни один из операндов не является строкой с двоичными данными:
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0
В функции LIKE
допускаются даже числовые выражения! (Это расширение MySQL по сравнению с ANSI SQL LIKE.)
mysql> SELECT 10 LIKE '1%';
-> 1
Примечание: поскольку в MySQL применяются правила экранирования в строках, применяемые в языке C (например, '\n
'), необходимо дублировать все символы "\
", используемые в строках функции LIKE
. Например, для поиска сочетания символов '\n
' его необходимо указать как '\\n
'. Чтобы выполнить поиск символа "\
", он должен быть указан как '\\\\
' (обратные слеши удаляются дважды: сначала синтаксическим анализатором, а потом - при выполнении сравнения с шаблоном, таким образом остается только один обратный слеш, который и будет обрабатываться).
expr NOT LIKE pat [ESCAPE 'escape-char']
То же, что и NOT (expr LIKE pat [ESCAPE 'escape-char'])
.
expr SOUNDS LIKE expr
Тоже самое что и SOUNDEX(expr)=SOUNDEX(expr)
(доступно в версии 4.1 или новее).
expr REGEXP pat
, expr RLIKE pat
Выполняет сравнение строкового выражения expr
с шаблоном pat
. Шаблон может представлять собой расширенное регулярное выражение. See Приложение G, Регулярные выражения в MySQL. Возвращает 1
, если expr
соответствует pat
, в противном случае - 0
. Функция RLIKE
является синонимом для REGEXP
, она предусмотрена для совместимости с mSQL. Примечание: поскольку в MySQL используются правила экранирования в строках, применяемые в языке C (например, '\n
'), необходимо дублировать все символы "\
", используемые в строках функции REGEXP
. Что касается версии MySQL 3.23.4, функция REGEXP
является независимой от регистра для нормальных строк (т.е. строк не с двоичными данными):
mysql> SELECT 'Monty!' REGEXP 'm%y%%';
-> 0
mysql> SELECT 'Monty!' REGEXP '.*';
-> 1
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1
mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
-> 1 0
mysql> SELECT "a" REGEXP "^[a-d]";
-> 1
В REGEXP
и RLIKE
используется текущий набор символов (ISO-8859-1 Latin1 по умолчанию),
expr NOT REGEXP pat
, expr NOT RLIKE pat
То же, что и NOT (expr REGEXP pat)
.
STRCMP(expr1,expr2)
Функция STRCMP()
возвращает: 0
, если строки идентичны, -1
- если первый аргумент меньше второго (в соответствии с имеющимся порядком сортировки), и 1
- в остальных случаях:
mysql> SELECT STRCMP('text', 'text2');
-> -1
mysql> SELECT STRCMP('text2', 'text');
-> 1
mysql> SELECT STRCMP('text', 'text');
-> 0
MATCH (col1,col2,...) AGAINST (expr)
, MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)
Функция MATCH ... AGAINST()
используется для полнотекстового поиска и возвращает величину релевантности - степень сходства между текстом в столбцах (col1,col2,...)
и запросом expr
. Величина релевантности представляет собой положительное число с плавающей точкой. Нулевая релевантность означает отсутствие сходства. Функция MATCH ... AGAINST()
работает в версиях MySQL 3.23.23 или более поздних. Расширение IN BOOLEAN MODE
было добавлено в версии 4.0.1. Более подробное описание и примеры использования приведены в разделе Раздел 6.8, «Полнотекстовый поиск в MySQL».