0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Представим, что нам нужно найти всех пользователей, чье имя начинается с букв 'A' или 'B': Abigale, Andy, Brayan, ... Если мы будем использовать только символ %, то ничего не получится, потому что он заменяет собой любой символ. Следовательно, нам нужен более точный механизм фильтрации. Это регулярные выражения, о которых пойдет речь в сегодняшнем уроке.</p>
1
<p>Представим, что нам нужно найти всех пользователей, чье имя начинается с букв 'A' или 'B': Abigale, Andy, Brayan, ... Если мы будем использовать только символ %, то ничего не получится, потому что он заменяет собой любой символ. Следовательно, нам нужен более точный механизм фильтрации. Это регулярные выражения, о которых пойдет речь в сегодняшнем уроке.</p>
2
<h2>Регулярные выражения</h2>
2
<h2>Регулярные выражения</h2>
3
<p>Язык SQL поддерживает работу с<strong>регулярными выражениями</strong>(<em>regular expressions</em>или<em>RegEx</em>). Это специальный язык, позволяющий достаточно точно определить шаблоны поиска в строке.</p>
3
<p>Язык SQL поддерживает работу с<strong>регулярными выражениями</strong>(<em>regular expressions</em>или<em>RegEx</em>). Это специальный язык, позволяющий достаточно точно определить шаблоны поиска в строке.</p>
4
<p>Для работы с регулярными выражениями используется оператор SIMILAR TO вместо LIKE.</p>
4
<p>Для работы с регулярными выражениями используется оператор SIMILAR TO вместо LIKE.</p>
5
<p>Вернемся к нашей задаче - нужно выбрать пользователей, чье имя начинается на 'A' или 'B'. Чтобы решить ее, нужно применить такой шаблон:</p>
5
<p>Вернемся к нашей задаче - нужно выбрать пользователей, чье имя начинается на 'A' или 'B'. Чтобы решить ее, нужно применить такой шаблон:</p>
6
<p><a>View on DB Fiddle</a></p>
6
<p><a>View on DB Fiddle</a></p>
7
<p>Разберем примененный шаблон [AB]%. В квадратных скобках перечисляются допустимые символы, а далее следует знакомый нам символ %. Этот запрос вернет пользователей с именами Abigale, Andy, Brayan, и так далее.</p>
7
<p>Разберем примененный шаблон [AB]%. В квадратных скобках перечисляются допустимые символы, а далее следует знакомый нам символ %. Этот запрос вернет пользователей с именами Abigale, Andy, Brayan, и так далее.</p>
8
<p>Представим, что нам нужно найти пользователей, у которых username заканчивается любой буквой. Это можно сделать таким шаблоном: %[abcdefghijklmnopqrstuvwxyz]. Согласитесь, такая запись неудобна для чтения и записи. А что, если мы случайно пропустим какую-то букву? В квадратных скобках можно использовать символ - для перечисления. Если записать в квадратных скобках начальный символ, поставить "-" и указать конечный символ, то такой шаблон вернет любой символ из диапазона от начального до конечного. Напишем запрос, который вернет всех пользователей по условию: username заканчивается любой буквой. Он будет выглядеть так:</p>
8
<p>Представим, что нам нужно найти пользователей, у которых username заканчивается любой буквой. Это можно сделать таким шаблоном: %[abcdefghijklmnopqrstuvwxyz]. Согласитесь, такая запись неудобна для чтения и записи. А что, если мы случайно пропустим какую-то букву? В квадратных скобках можно использовать символ - для перечисления. Если записать в квадратных скобках начальный символ, поставить "-" и указать конечный символ, то такой шаблон вернет любой символ из диапазона от начального до конечного. Напишем запрос, который вернет всех пользователей по условию: username заканчивается любой буквой. Он будет выглядеть так:</p>
9
<p><a>View on DB Fiddle</a></p>
9
<p><a>View on DB Fiddle</a></p>
10
<p>Точно так же можно работать и с русскими буквами: '%[а-я]%'. Такой запрос поможет найти пользователей, у которых в поле username есть русские буквы:</p>
10
<p>Точно так же можно работать и с русскими буквами: '%[а-я]%'. Такой запрос поможет найти пользователей, у которых в поле username есть русские буквы:</p>
11
<p><a>View on DB Fiddle</a></p>
11
<p><a>View on DB Fiddle</a></p>
12
<p>Чтобы выбрать все цифры, используем шаблон [0-9]:</p>
12
<p>Чтобы выбрать все цифры, используем шаблон [0-9]:</p>
13
<p><a>View on DB Fiddle</a></p>
13
<p><a>View on DB Fiddle</a></p>
14
<p>Такой запрос вернет всех пользователей, чей username заканчивается на любую цифру.</p>
14
<p>Такой запрос вернет всех пользователей, чей username заканчивается на любую цифру.</p>
15
<p>Комбинируя правила, мы можем создавать достаточно сложные шаблоны. Например, проверим, что в поле email введены корректные адреса электронной почты.</p>
15
<p>Комбинируя правила, мы можем создавать достаточно сложные шаблоны. Например, проверим, что в поле email введены корректные адреса электронной почты.</p>
16
<p>Корректная почта должна содержать адрес, который состоит из:</p>
16
<p>Корректная почта должна содержать адрес, который состоит из:</p>
17
<ul><li>Имени с любым количеством любых символов - например, my_email</li>
17
<ul><li>Имени с любым количеством любых символов - например, my_email</li>
18
<li>Символа @</li>
18
<li>Символа @</li>
19
<li>Домена с любым количеством любых символов - например, gmail</li>
19
<li>Домена с любым количеством любых символов - например, gmail</li>
20
<li>Точки</li>
20
<li>Точки</li>
21
<li>Указания национальной зоны - например, com</li>
21
<li>Указания национальной зоны - например, com</li>
22
</ul><p>Запрос на поиск корректных адресов будет таким:</p>
22
</ul><p>Запрос на поиск корректных адресов будет таким:</p>
23
<p><a>View on DB Fiddle</a></p>
23
<p><a>View on DB Fiddle</a></p>
24
<p>Такой запрос выведет имена пользователей с корректными адресами электронной почты, однако нам интереснее найти ошибки. В этом случае частица NOT позволит найти строки, которые<strong>не</strong>соответствуют шаблону:</p>
24
<p>Такой запрос выведет имена пользователей с корректными адресами электронной почты, однако нам интереснее найти ошибки. В этом случае частица NOT позволит найти строки, которые<strong>не</strong>соответствуют шаблону:</p>
25
<p><a>View on DB Fiddle</a></p>
25
<p><a>View on DB Fiddle</a></p>
26
<p>Теперь выберем все адреса электронной почты, у которых национальная зона состоит ровно из двух символов - например, ru, su, io и так далее. При этом исключим зоны, состоящие из трех и более символов - например, com.</p>
26
<p>Теперь выберем все адреса электронной почты, у которых национальная зона состоит ровно из двух символов - например, ru, su, io и так далее. При этом исключим зоны, состоящие из трех и более символов - например, com.</p>
27
<p>Это можно сделать так: %.[a-z][a-z]. Но удобнее воспользоваться еще одним спецсимволом - подчеркиванием _.</p>
27
<p>Это можно сделать так: %.[a-z][a-z]. Но удобнее воспользоваться еще одним спецсимволом - подчеркиванием _.</p>
28
<p>Символ подчеркивания обозначает ровно один любой символ, необязательно букву. Наш запрос будет выглядеть так:</p>
28
<p>Символ подчеркивания обозначает ровно один любой символ, необязательно букву. Наш запрос будет выглядеть так:</p>
29
<p><a>View on DB Fiddle</a></p>
29
<p><a>View on DB Fiddle</a></p>
30
<p>Чтобы вывести пользователей с адресами электронной почты оканчивающимися на 3 символа, нужно добавить еще одно подчеркивание в наш шаблон:</p>
30
<p>Чтобы вывести пользователей с адресами электронной почты оканчивающимися на 3 символа, нужно добавить еще одно подчеркивание в наш шаблон:</p>
31
<p><a>View on DB Fiddle</a></p>
31
<p><a>View on DB Fiddle</a></p>
32
<p>Мы рассмотрели наиболее полезные и часто используемые возможности регулярных выражений в SQL, но они ими не ограничиваются. Полный перечень возможностей вы можете посмотреть в<a>документации</a>.</p>
32
<p>Мы рассмотрели наиболее полезные и часто используемые возможности регулярных выражений в SQL, но они ими не ограничиваются. Полный перечень возможностей вы можете посмотреть в<a>документации</a>.</p>
33
<h2>Выводы</h2>
33
<h2>Выводы</h2>
34
<p>В этом уроке мы познакомились с оператором SIMILAR TO. Он помогает формировать шаблоны для фильтрации текстовых полей. Повторим самые полезные и часто используемые спецсимволы:</p>
34
<p>В этом уроке мы познакомились с оператором SIMILAR TO. Он помогает формировать шаблоны для фильтрации текстовых полей. Повторим самые полезные и часто используемые спецсимволы:</p>
35
<ul><li>Символ % соответствует любому количеству любых символов</li>
35
<ul><li>Символ % соответствует любому количеству любых символов</li>
36
<li>Квадратные скобки [] используются для перечисления конкретных символов - например, [АЕИОУЭЮ]</li>
36
<li>Квадратные скобки [] используются для перечисления конкретных символов - например, [АЕИОУЭЮ]</li>
37
<li>Дефис - в квадратных скобках означает перечисление символов - например, [0-9] соответствует любой цифре</li>
37
<li>Дефис - в квадратных скобках означает перечисление символов - например, [0-9] соответствует любой цифре</li>
38
<li>Подчеркивание _ означает ровно один любой символ (букву или цифру)</li>
38
<li>Подчеркивание _ означает ровно один любой символ (букву или цифру)</li>
39
</ul>
39
</ul>