Извлечение названий городов SQL: начинающиеся и заканчивающиеся на гласные

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы определить, начинаются и заканчиваются ли имена в вашей таблице гласной буквой, используйте оператор LIKE с соответствующими паттернами, обозначающими гласные:

SQL
Скопировать код
SELECT *
FROM your_table
WHERE name LIKE '[AEIOUaeiou]%' AND name LIKE '%[AEIOUaeiou]';

Этот запрос выстроит выборку строк, где имя начинается и заканчивается гласной буквой. Учтено различие между строчными и прописными буквами.

Кинга Идем в IT: пошаговый план для смены профессии

Обработка шаблона с регулярными выражениями

Для более сложных паттернов можно использовать регулярные выражения, доступные в таких системах управления базами данных, как MySQL и PostgreSQL. Ниже приведен пример запроса, используемый для поиска имен, которые начинаются и заканчиваются гласной:

SQL
Скопировать код
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';

Разберем проверку по элементам:

  • ^ – обозначает начало строки;
  • [aeiouAEIOU] – означает любую гласную букву;
  • .* – стоит для произвольного количества любых символов;
  • [aeiouAEIOU]$ – обозначает окончание строки гласной буквой;
  • DISTINCT – используется для возвращения только уникальных названий городов.

Поиск в Oracle без учёта регистра

В Oracle, для регистронезависимого поиска используется функция REGEXP_LIKE, с модификатором 'i':

SQL
Скопировать код
SELECT DISTINCT CITY
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]$', 'i');

Модификатор 'i' делает выражение регистронезависимым, что упрощает запрос.

Альтернативный подход без использования регулярных выражений

Если ваша среда не поддерживает регулярные выражения, обойтись можно при помощи функций SUBSTRING и IN:

SQL
Скопировать код
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:

SQL
Скопировать код
SELECT *
FROM your_table
WHERE LOWER(name) LIKE 'a%' AND LOWER(name) LIKE '%a';

В этом запросе все символы поля name приведены к нижнему регистру для последующего сопоставления с шаблоном.

О выборе подходящего инструмента

Прорабатывая задачи с различными СУБД, учитывайте их специфику и выбирайте подходящие инструменты, будь то LIKE, REGEXP или что-то другое. Каждый из этих инструментов имеет свои преимущества и недостатки, и вам предстоит выбрать наиболее подходящий для вашей конкретной задачи.

Визуализация

Для наглядности приведем таблицу с примерами имен и их соответствием условиям:

Markdown
Скопировать код
| Имя         | Соответствие |
| ------------| -------------|
| Оливер      | ✅           |
| Алиса       | ✅           |
| Георгий     | ❌           |
| Ева         | ✅           |

Полезные материалы

  1. LIKE (Transact-SQL) – SQL Server | Microsoft Learn — описание оператора LIKE в SQL Server.
  2. PostgreSQL: Documentation: 16: 9.7. Поиск по шаблону — документация по работе с регулярными выражениями в PostgreSQL.
  3. MySQL :: MySQL 8.0 Reference Manual :: 12.8.2 Регулярные выражения — возможности использования регулярных выражений в MySQL.
  4. SQL Language Expressions — особенности работы с выражениями в SQLite.
  5. Использование регулярных выражений в базах данных — поддержка регулярных выражений в Oracle.
  6. SQL LIKE Operator — обучающий курс W3Schools по работе с оператором LIKE.