Извлечение названий городов SQL: начинающиеся и заканчивающиеся на гласные
Быстрый ответ
Чтобы определить, начинаются и заканчиваются ли имена в вашей таблице гласной буквой, используйте оператор LIKE
с соответствующими паттернами, обозначающими гласные:
SELECT *
FROM your_table
WHERE name LIKE '[AEIOUaeiou]%' AND name LIKE '%[AEIOUaeiou]';
Этот запрос выстроит выборку строк, где имя начинается и заканчивается гласной буквой. Учтено различие между строчными и прописными буквами.
Обработка шаблона с регулярными выражениями
Для более сложных паттернов можно использовать регулярные выражения, доступные в таких системах управления базами данных, как MySQL и PostgreSQL. Ниже приведен пример запроса, используемый для поиска имен, которые начинаются и заканчиваются гласной:
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';
Разберем проверку по элементам:
^
– обозначает начало строки;[aeiouAEIOU]
– означает любую гласную букву;.*
– стоит для произвольного количества любых символов;[aeiouAEIOU]$
– обозначает окончание строки гласной буквой;DISTINCT
– используется для возвращения только уникальных названий городов.
Поиск в Oracle без учёта регистра
В Oracle, для регистронезависимого поиска используется функция REGEXP_LIKE
, с модификатором 'i'
:
SELECT DISTINCT CITY
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]$', 'i');
Модификатор 'i'
делает выражение регистронезависимым, что упрощает запрос.
Альтернативный подход без использования регулярных выражений
Если ваша среда не поддерживает регулярные выражения, обойтись можно при помощи функций SUBSTRING
и IN
:
SELECT DISTINCT city
FROM station
WHERE SUBSTRING(city, 1, 1) IN ('A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u')
AND SUBSTRING(city, -1, 1) IN ('A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u');
Обратите внимание, что регулярные выражения могут быть менее производительными из-за необходимости полного сканирования таблиц, тогда как использование LIKE
более эффективно воспользуется индексами.
Обеспечение однородности регистра с помощью функции LOWER
В случае, когда возможности регулярных выражений не предусматривают поиска без учёта регистра, можно применить LOWER
:
SELECT *
FROM your_table
WHERE LOWER(name) LIKE 'a%' AND LOWER(name) LIKE '%a';
В этом запросе все символы поля name
приведены к нижнему регистру для последующего сопоставления с шаблоном.
О выборе подходящего инструмента
Прорабатывая задачи с различными СУБД, учитывайте их специфику и выбирайте подходящие инструменты, будь то LIKE
, REGEXP
или что-то другое. Каждый из этих инструментов имеет свои преимущества и недостатки, и вам предстоит выбрать наиболее подходящий для вашей конкретной задачи.
Визуализация
Для наглядности приведем таблицу с примерами имен и их соответствием условиям:
| Имя | Соответствие |
| ------------| -------------|
| Оливер | ✅ |
| Алиса | ✅ |
| Георгий | ❌ |
| Ева | ✅ |
Полезные материалы
- LIKE (Transact-SQL) – SQL Server | Microsoft Learn — описание оператора LIKE в SQL Server.
- PostgreSQL: Documentation: 16: 9.7. Поиск по шаблону — документация по работе с регулярными выражениями в PostgreSQL.
- MySQL :: MySQL 8.0 Reference Manual :: 12.8.2 Регулярные выражения — возможности использования регулярных выражений в MySQL.
- SQL Language Expressions — особенности работы с выражениями в SQLite.
- Использование регулярных выражений в базах данных — поддержка регулярных выражений в Oracle.
- SQL LIKE Operator — обучающий курс W3Schools по работе с оператором LIKE.