Post date: Mar 15, 2016 5:17:48 AM
Оператор RLIKE
Оператор RLIKE (а также синоним REGEXP)производит поиск в соответствии с регулярными выражениями, что позволяет задать более гибкие условия поиска, однако при этом данный оператор работает медленнее нежели оператор LIKE.
Существует несколько диалектов регулярных выражений. В СУБД MySQL реализация ориентирована на соответствие стандарту POSIX.
Регулярное выражение это шаблон применяемый к заданному тексту с лева на право. Например регулярное выражение содержащее обычный текст, например 'монитор', соответствует строке содержащей такую подстроку например: 'мониторинг', 'мониторы', 'большие мониторы', и т.п.
Пример:
select NAME from market_cards where NAME RLIKE 'кекс'
Результат работы:
КЕКС К ЧАЮ В АССОРТ. 225ГР.
СУХАЯ СМЕСЬ ДЛЯ КЕКСА АТЛАНТА
МИНИ КЕКСЫ 6ШТ
Из таблицы market_cards будут выбраны все записи где поле NAME содержит слово 'кекс' при этом неважно в каком месте строки это слово (или точнее сказать сочетание символов) расположено.
Чтобы привязать искомое выражение к началу строки либо к концу используются символы:
'^' — привязывает к началу строки.
'$' — привязывает к концу строки.
Пример:
1) select NAME from market_cards where NAME RLIKE '^кекс'
2) select NAME from market_cards where NAME RLIKE 'кекс$'
3) select NAME from market_cards where NAME RLIKE '^кекс$'
Результат работы:
Первый запрос вернйт нам записи типа:
КЕКСЫ МИНИ КОВИС 200ГР.
КЕКС К ЧАЮ ХАРРИС 225ГР.
КЕКСЫ 7 ДНЕЙ МАГДАЛЕН.
Второй и третий запросы ничего не вернут, поскольку не найдут записей оканчивающихся на слово 'кекс'
Гораздо чаще необходимо привязываться ни к концу или началу строки, а к концу или началу слова.
Такую задачу реализуют последовательности:
[[:<:]] — Начало слова.
[[:>:]] — Конец слова.
Пример:
select NAME from market_cards where NAME RLIKE '[[:<:]]медведь[[:>:]]'
Результат:
ИГРУШКА МЕДВЕДЬ МИТЕНЬКА РЮКЗАК
ИГРУШКА МЕДВЕДЬ МИТЬКА
МЕДВЕДЬ КОРИЧНЕВЫЙ
ИГРУШКА МЕДВЕДЬ МИТЬКА
Ещё один специальный символ:
'|' — Аналогичен по смыслу (или), например 'мама|мать' — будут выбраны все строки включающие и 'мама' и 'мать'.
В регулярном выражении возможно использование других спецсимволов и классов символов:
[abc] — будут выбраны записи с любым из символов a,b,c.
[0-9] — любая из цифр. (аналогичен по смыслу [0123456789]).
[а-я] — любая из букв от а до я.
[а-я0-9] — любая буква русского алфавита либо цифра.
[^0-9] — означает любое значение кроме цифры. (в подобных случаях '^' — своего рода отрицание).
Для определения специальных последовательностей внутри строк:
'\t' — символ табуляции.
'\f' — конец файла.
'\n' — символ перевода строки.
'\r' — символ возврата каретки.
'\\' — символ обратного слэша \.
Кроме этого действуют классы символов POSIX регулярных выражений:
[:alnum:] — алфавитно цифровые символы.
[:alpha:] — символы алфавита.
[:blank:] — символы пробела и табуляции.
[:cntrl:] — управляющие символы.
[:digit:] — десятичные цифры (0-9).
[:graph:] — графические (видимые) символы.
[:lower:] — символы алфавита в нижнем регистре.
[:print:] — графические или невидимые символы.
[:punct:] — знаки препинания.
[:space:] — символы пробела, табуляции, новой строки или возврата каретки.
[:upper:] — символы алфавита в верхнем регистре.
[:xdigit:] — шестнадцатеричные цифры.
(Алфавитные символы — могут быть как русскими так и английскими.)
Выражения в квадратных скобках соответствуют только одному символу и часто употребляются с квантификаторами, которые следуют сразу за символом и изменяют количествое его вхождений в строку.
? — символ либо входит в строку один раз, либо вообще в неё не входит.
* — любое число вхождений символа в строку, в том числе и ноль.
+ — одно или более вхождений символа в строку.
Оператор RLIKE можно использовать с отрицанием NOT RLIKE — в этом случае результатом его работы будет выборка строк не соответствующих заданным параметрам.
@http://kbss.ru/blog/bd_mysql/2.html