LIKE
Синтаксис
expr LIKE pat [ESCAPE 'escape_char'] expr NOT LIKE pat [ESCAPE 'escape_char']
Описание
Проверяет, соответствует ли выражение expr шаблону pat. Возвращает либо 1 (TRUE) либо 0 (FALSE). И expr, и pat могут быть любыми допустимыми выражениями и приводятся к строкам. Шаблоны могут использовать следующие символы подстановки:
-
%соответствует любому количеству символов, включая ноль. -
_соответствует любому одному символу.
Используйте NOT LIKE для проверки, не соответствует ли строка шаблону. Это эквивалентно использованию оператора NOT над всем выражением LIKE.
Если выражение или шаблон NULL, результат NULL.
LIKE выполняет сопоставление подстрок без учета регистра, если сортировка для выражения и шаблона не учитывает регистр. Для сопоставления с учетом регистра укажите для любого аргумента сортировку по байтам с помощью COLLATE, или приведите один из них к строке с помощью BINARY CAST. Используйте SHOW COLLATION для получения списка доступных сортировок. Сортировки, заканчивающиеся на _bin, чувствительны к регистру.
Числовые аргументы приводятся к строкам типа byte.
Символ подстановки _ соответствует одному символу, а не байту. Он будет соответствовать многобайтовому символу только в том случае, если он является допустимым символом в наборе символов выражения. Например, _ будет соответствовать _utf8"€", но не _latin1"€", потому что знак евро не является допустимым символом набора latin1. При необходимости используйте CONVERT, чтобы использовать выражение в другом наборе символов.
Если необходимо сопоставить символы _ или %, их необходимо экранировать. По умолчанию вы можете экранировать символы подстановки префиксом обратной косой чертой \. Обратная косая черта используется для кодирования специальных символов, таких как новые строки, когда строка анализируется, а также для экранирования символов подстановки в шаблоне после анализа. Таким образом, чтобы сопоставить фактическую обратную косую черту, иногда необходимо удвоить экранирование, как в "\\\\".
Чтобы избежать проблем с обратной косой чертой, вы можете изменить символ экранирования символов подстановки с помощью ESCAPE в выражении LIKE. Аргумент для ESCAPE должен быть строкой из одного символа.
Примеры
Выбор дней, начинающихся с "T":
CREATE TABLE t1 (d VARCHAR(16));
INSERT INTO t1 VALUES
("Monday"), ("Tuesday"), ("Wednesday"),
("Thursday"), ("Friday"), ("Saturday"), ("Sunday");
SELECT * FROM t1 WHERE d LIKE "T%";
SELECT * FROM t1 WHERE d LIKE "T%"; +----------+ | d | +----------+ | Tuesday | | Thursday | +----------+
Выбор дней, содержащих подстроку "es":
SELECT * FROM t1 WHERE d LIKE "%es%";
SELECT * FROM t1 WHERE d LIKE "%es%"; +-----------+ | d | +-----------+ | Tuesday | | Wednesday | +-----------+
Выбор имён дней длиной в шесть символов:
SELECT * FROM t1 WHERE d like "___day";
SELECT * FROM t1 WHERE d like "___day"; +---------+ | d | +---------+ | Monday | | Friday | | Sunday | +---------+
При значениях по умолчанию LIKE нечувствителен к регистру:
SELECT * FROM t1 where d like "t%";
SELECT * FROM t1 where d like "t%"; +----------+ | d | +----------+ | Tuesday | | Thursday | +----------+
Используйте COLLATE для указания сортировки по байтам, принудительно делая сопоставление чувствительным к регистру:
SELECT * FROM t1 WHERE d like "t%" COLLATE latin1_bin;
SELECT * FROM t1 WHERE d like "t%" COLLATE latin1_bin; Empty set (0.00 sec)
Вы можете включать функции и операторы в выражение для сопоставления. Выбор дат по имени дня:
CREATE TABLE t2 (d DATETIME);
INSERT INTO t2 VALUES
("2007-01-30 21:31:07"),
("1983-10-15 06:42:51"),
("2011-04-21 12:34:56"),
("2011-10-30 06:31:41"),
("2011-01-30 14:03:25"),
("2004-10-07 11:19:34");
SELECT * FROM t2 WHERE DAYNAME(d) LIKE "T%";
SELECT * FROM t2 WHERE DAYNAME(d) LIKE "T%"; +------------------+ | d | +------------------+ | 2007-01-30 21:31 | | 2011-04-21 12:34 | | 2004-10-07 11:19 | +------------------+ 3 rows in set, 7 warnings (0.00 sec)
Оптимизация LIKE
- MariaDB может использовать индексы для LIKE на строковых столбцах в случае, когда LIKE не начинается с
%или_. - Начиная с MariaDB 10.0, можно установить переменную optimizer_use_condition_selectivity в значение 5. В этом случае оптимизатор будет читать optimizer_selectivity_sampling_limit строк для расчёта селективности выражения LIKE перед началом расчёта плана запроса. Это может помочь ускорить некоторые запросы LIKE, предоставив оптимизатору больше информации о ваших данных.
См. также
- Для поиска в текстовых столбцах с результатами, отсортированными по релевантности, см. полнотекстовые индексы.
- Для более сложных поисков и операций со строками вы можете использовать регулярные выражения, которые были улучшены в MariaDB 10 (см. PCRE Regular Expressions).
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/like/