HTML Diff
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>