MySQL регулярные выражения

В MySQL регулярные выражения позволяют упрощать запросы — прежде всего, запросы типа SELECT. Как и любые другие регулярные выражения в MySQL это наборы символов под которые могут подходить те или иные последовательности вводимых клиентом данных.

 

Цикл по принципам работы с MySQL, более ранние материалы:
  1. Вводная статья цикла
  2. Начало работы с MySQL и основные команды
  3. MySQL SELECT, выборка из таблиц MySQL

 

 

MySQL регулярные выражения

Ниже приведены выражения, которым могут использоваться и их характеристика

 

'.'

Точка означает, что вместо нее может использоваться любой одиночный символ

 

'[…]'

Квадратные скобки, под них подойдут любой символ в них указанный и один из них. Например, регулярное выражение '[abc]' будет означать, что a или b, или c могут встретиться и будут удовлетворять regexp. Регистр имеет значение, A предыдущему выражению удовлетворять уже не будет, за счет тире можно указывать диапазон значений если вариантов много и перечислять их все неудобно. Под [a-z][1-9] подойдет выражение из последовательных буквы латинского алфавита в нижнем регистре и цифры

 

'*'

Подходит под любое число знаков, ей предшествующих. Так  [a-z]* будет означать, что под regexp подойдет слово любой длины из латинских букв в нижнем регистре.

'^'

Означает, что выражение должно начинаться с символа, который идет сразу за знаком

 

'$'

Означает, что выражение должно заканчиваться на символ, который идет сразу перед знаком

 

MySQL регулярные выражения

Все регулярные выражения выводятся с указанием ключевого слова REGEXP. Изображение взято с официального сайта MySQL

 

Использование регулярных выражений в MySQL

Для демонстрации возьмем выражение с LIKE и используем вместо него REGEXP

 

Найдем все данные об объектах недвижимости, которые располагаются на улице, название которой начинается с B, имеет одну произвольную букву, затем l и любое количество символов

 

 

SELECT * FROM REAL_ESTATE WHERE street REGEXP '^B.l*';

+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
+————+————-+————+————-+————+————+——-+
2 rows in set (0.00 sec)

 

Можно найти ту же квартиру на улице Белинского задав в качестве критерия поиска последний символ в имени

 

SELECT * FROM REAL_ESTATE WHERE street REGEXP 'o$';

+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
+————+————-+————+————-+————+————+——-+
1 row in set (0.00 sec)

 

 

Далее рассмотрим простейшие конструкции с JOIN в SELECT запросах