Использование символа $ вместо% - PullRequest
1 голос
/ 17 июня 2019

Я начал практиковать SQL и думаю, что мне нужно освежить некоторые темы.

В этом заявлении о проблеме в хакерранке говорится, что в запросе перечислены имена ГОРОДОВ от STATION, которые не заканчиваются гласными.

Я пытался использовать подстановочный знак '%[^aeiou]'

SELECT Distinct City 
FROM Station 
Where City LIKE '%[^aeiou]'
Order By City;

Сообщение компилятора: Неверный ответ.

Я знаю другие способы выполнения программы, но что не так с этим. Кроме того, мне интересно, как работает REGEXP '[^aiueo]$', но Like '%[^aeiou] или Not Like '%[aeiou]' не является исполняемым?

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

MySQL не поддерживает расширения SQL Server для LIKE. Вместо этого используйте регулярные выражения:

SELECT DISTINCT City 
FROM Station 
WHERE City REGEXP '[^aeiou]$'
ORDER BY City;

Обратите внимание, что вы должны привязать регулярное выражение к концу строки. LIKE паттерны автоматически соответствуют всей строке; REGEXP шаблоны могут совпадать в любом месте строки, если они не привязаны к началу или концу.

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

SELECT DISTINCT City 
FROM Station 
WHERE RIGHT(City, 1) NOT IN ('a', 'e', 'i', 'o', 'u')
ORDER BY City;
1 голос
/ 17 июня 2019

LIKE поддерживает только подстановочные знаки, и вы используете для очень простого соответствия.

REGEXP или RLIKE имеет полную поддержку регулярных выражений.

Регулярное выражение - это мощный способ задания шаблона для комплексный поиск. В этом разделе рассматриваются функции и операторы доступно для сопоставления регулярных выражений и иллюстрирует, с примеры, некоторые из специальных символов и конструкций, которые могут быть используется для операций с регулярными выражениями.

См. Руководство по LIKE и REGEXP

Если вы должны использовать LIKE, попробуйте это:

SELECT DISTINCT City 
FROM Station 
WHERE City NOT LIKE '%a'
OR City NOT LIKE '%e'
OR City NOT LIKE '%i'
OR City NOT LIKE '%o'
OR City NOT LIKE '%u';

Если вам нужен более быстрый запрос, используйте RIGHT ( Gordon Linoff answer ) или REGEXP

...