С MySQL мы могли бы использовать регулярное выражение, что-то вроде этого:
WHERE city REGEXP '^[AEIOU].*[aeiou]$'
Не для того, чтобы погружаться слишком глубоко в регулярные выражения, но в качестве помощи для расшифровки этого:
каретка ^
соответствует началу строки
следующий символ должен быть одним из символов в наборе в квадратных скобках A
, E
, I
, O
или U
, за которым следует любое число любого символа, точка .
соответствует любому символу, *
повторение, ноль, один или несколько
последний символ должен совпадать с одним из символов в квадратных скобках a
, e
, i
, o
, u
потому что знак доллара $
соответствует концу строки
Для тестирования используйте оператор SELECT
SELECT t.city
, t.city REGEXP '^[AEIOU].*[aeiou]$'
FROM ( SELECT 'A' AS city
UNION ALL SELECT 'Aa'
UNION ALL SELECT 'Abba'
UNION ALL SELECT 'a'
) t
AsГордон указывает в комментарии, тот же подход с использованием сравнения регулярных выражений будет работать в PostgreSQL.Но там синтаксис немного другой, операция сравнения - это тильда ~
вместо ключевого слова MySQL REGEXP
или RLIKE
.
WHERE city ~ '^[AEIOU].*[aeiou]$'
https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP