LIKE и REGEXP - регулярные выражения
LIKE
Оператор LIKE
принимает шаблон строки, которому должно соответствовать выражение:
SELECT `список_столбцов` (или*) FROM `имя_таблицы` WHERE `условие` LIKE 'шаблон_строки';
SELECT `список_столбцов` (или*) FROM `имя_таблицы` WHERE `условие` NOT LIKE 'шаблон_строки';
Для определения шаблона могут применяться ряд специальных символов подстановки:
Значение |
Описание |
% |
Cоответствует любой подстроке, которая может иметь любое количество символов, при этом подстрока
может и не содержать ни
одного символа. Например, выражение WHERE ProductName LIKE 'Galaxy%' соответствует таким значениям
как Galaxy Ace 2 или Galaxy S7
|
_ |
Cоответствует любому одиночному символу. Например, выражение WHERE ProductName LIKE 'Galaxy S_'
соответствует таким значениям как Galaxy S7 или Galaxy S8
|
При проверке по шаблону LIKE
всегда рассматривается вся строка. Поэтому, если нужно найти последовательность символов где-то в середине строки, шаблон должен начинаться и заканчиваться знаком %
.
Чтобы найти в строке буквальное вхождение знака процента или подчёркивания, перед соответствующим символом в шаблоне нужно добавить спецсимвол (экранирование). По умолчанию в качестве спецсимвола выбрана обратная косая черта \
.
SELECT * FROM `users` WHERE `age` LIKE '2%';
SELECT * FROM `users` WHERE `age` LIKE '2_';
REGEXP
REGEXP
позволяет задать регулярное выражение, которому должно соответствовать значение столбца. В этом
плане REGEXP
представляет более изощренный и комплексный способ фильтрации, нежели оператор LIKE
.
REGEXP
имеет похожий синтаксис:
SELECT `список_столбцов` (или*) FROM `имя_таблицы` WHERE `условие` REGEXP регулярное_выражение;
SELECT `список_столбцов` (или*) FROM `имя_таблицы` WHERE `условие` NOT REGEXP регулярное_выражение;
Значение |
Описание |
^ |
Указывает на начало строки |
$ |
Указывает на конец строки |
. |
Соответствует любому одиночному символу |
[символы] |
Соответствует любому одиночному символу из скобок |
[начальный_символ-конечный_символ] |
Соответствует любому одиночному символу из диапазона символов |
| |
Отделяет два шаблона строки, и значение должно соответствовать одну из этих шаблонов |