Понимание, почему запросы к городам с гласными в начале и в конце не работают - PullRequest
0 голосов
/ 18 января 2020

Задача:

Запрос списка имен из таблицы, в которых гласные обозначены как первый и последний символы [дубликаты].

Я хочу запросить список имен CITY из таблицы STATION (id, город, долгота, широта), в которых гласные являются как их первым, так и последним символом. Результат не может содержать дубликаты.

Мой запрос:

SELECT DISTINCT CITY 
FROM STATION 
WHERE CITY LIKE '[aeiou]%' AND '%[aeiou]'

Я нашел это решение:

Select distinct city 
from station
Where regexp_like(city, '^[aeiou].*[aeiou]$','i');

Почему мой запрос не работает?

1 Ответ

0 голосов
/ 18 января 2020

'[aeiou]' - это класс символов регулярных выражений, который не поддерживается оператором LIKE. Таким образом, ваш запрос не будет выполнять то, что вы ожидаете: на самом деле он ищет буквенную строку , которая начинается с '[aeiou]' (и даже если бы это было так, вам нужно будет повторить выражение city like ... дважды: city like ... and ... тоже не делает то, что вы ожидаете.)

В найденном решении используется regexp_like() со следующим регулярным выражением: ^[aeiou].*[aeiou]$, что означает:

^         beginning of the string
[aeiou]   one of the characters in the list
.*        a sequence of 0 to N characters
[aeiou]   one of the characters in the list
$         end of the string

Опция 'i' делает регистр нечувствителен к регистру.

Это работает, но требует MySQL 8.0. Если вы используете более раннюю версию, попробуйте вместо этого использовать условие REGEXP:

CITY REGEXP '^[aeiou].*[aeiou]$'
...