Запросите список названий CITY на STATION, которые либо не начинаются с гласных, либо не заканчиваются гласными. Ваш результат не может содержать дубликатов.
Формат ввода
Таблица STATION описывается следующим образом:

Я пишу запрос ниже, но работает нормально. Любое предложение?
SELECT DISTINCT city FROM station WHERE city NOT RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';
Чем не работает?
Какой СУБД вы используете? «SQL» - это просто язык запросов, а не название конкретного продукта базы данных. Добавьте тег для продукта базы данных, который вы используете postgresql, oracle, sql-server, db2, ...
@AriSingh: на самом деле большинство СУБД делать поддерживают регулярные выражения. Но поскольку настоящего стандарта SQL нет (по крайней мере, для реального регулярного выражения POSIX), синтаксис сильно различается для каждого продукта СУБД.
"или / или" звучит так, будто оба может начинаться и заканчиваться на гласной?
На основе использования типа данных VARCHAR2 база данных Oracle.


Предполагая, что вы используете MySQL, вот что вы ищете
SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*|.*[^AEIOUaeiou]$';
Сноска: RLIKE и ОТЧЕТЛИВЫЙ
Вы предполагаете, что OP использует MySQL. Ответ на вопрос, который нерешительно помечен, только сбивает с толку любого, кто задает аналогичный вопрос.
Дать согласие! Отредактировал свой ответ, хотя я только что изменил запрос в ответе OP. Хотя RLIKE отличается для баз данных diff
В MySQL RLIKE и REGEXP эквивалентны.
@AnandG Что будет в MS SQL Server?
Этот SQL-запрос будет вам полезен. Если вы используете MS SQL, следуйте этой строке кода, приведенной ниже:
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT LIKE '[AEIOU]%' OR CITY NOT LIKE '%[aeiou]';
Если вы используете MySQL, следуйте этой строке кода, приведенной ниже:
SELECT DISTINCT CITY
FROM STATION
WHERE (CITY NOT IN (SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '%a' OR CITY LIKE '%e' OR CITY LIKE '%i' OR CITY LIKE '%o' OR CITY LIKE '%u'))
OR
(CITY NOT IN (SELECT CITY FROM STATION WHERE CITY LIKE 'A%' OR CITY LIKE 'E%' OR CITY LIKE 'I%' OR CITY LIKE 'O%' OR CITY LIKE 'U%'));
Попробуйте следующее:
SELECT city
FROM station
WHERE left(city,1) not regexp 'a|e|i|o|u' or right(city,1) not regexp 'a|e|i|o|u'
GROUP BY city
Этот SQL-запрос будет полезен для вас, если вы используете Oracle:
SELECT DISTINCT city
FROM station
WHERE regexp_like (city, '^[^aeiouAEIOU].*')
OR regexp_like (city, '.*[^aeiouAEIOU]$');
Другой ответ, если вы используете Oracle:
SELECT DISTINCT (CITY)
FROM STATION
WHERE NOT regexp_like(lower(CITY),'^[aeiou].*[aeiou]$');
Что касается '^ [aeiou]. * [Aeiou] $', как понять запятую и звездочку здесь? Я видел, что это популярный ответ, но теперь знаю, как понять. *
1. запятой нет, проверьте пожалуйста. 2. .* означает, что строка должна начинаться с любого из (aeiou) и может иметь ноль или более повторений этой буквы.
SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*
[^aeiouAEIOU]$';
Вы должны поместить символ вставки в квадратные скобки, что означает отсутствие гласных. Здесь - объяснение
Работает в MySQL.
Исправление вышеуказанного оператора с использованием MS SQL SERVER показано ниже:
SELECT DISTINCT CITY FROM STATION WHERE CITY NOT LIKE '[AEIOU]%' OR CITY NOT LIKE '[aeiou]**%**';
Чтобы отфильтровать начальную гласную в верхнем регистре и начинающуюся в нижнем регистре, не следует ли использовать AND вместо OR? Или еще лучше, просто объедините случаи, например WHERE CITY NOT LIKE '[AaEeIiOoUu]%' OR CITY NOT LIKE '%[AaEeIiOoUu]'
Я работал с этим
SELECT DISTINCT CITY FROM STATION
WHERE CITY NOT LIKE 'a%'
AND CITY NOT LIKE 'e%'
AND CITY NOT LIKE 'i%'
AND CITY NOT LIKE 'o%'
AND CITY NOT LIKE 'u%'
AND CITY NOT LIKE '%a'
AND CITY NOT LIKE '%e'
AND CITY NOT LIKE '%i'
AND CITY NOT LIKE '%o'
AND CITY NOT LIKE '%u'
select distinct CITY
from STATION
where SUBSTRING(CITY, Length(CITY), 1) NOT in ('a','e','i','o','u','A','E','I','O','U')
order by CITY
Select Distinct
City
From
Station
Where
Lower(Left(City,1)) not in ('a','e','i','o','u')
or Lower(Right(City,1)) not in ('a','e','i','o','u')
Объясните, почему это правильный ответ, и отформатируйте код.
SELECT DISTINCT CITY
FROM STATION
WHERE
left(city,1) NOT IN ('a','e','i','o','u') OR RIGHT(city,1)
NOT IN ('a','e','i','o','u')
пожалуйста, ответ будет более полным, если вы добавите текст пояснения к своему решению.
Попробуй это:
select DISTINCT city from STATION
where (CITY NOT LIKE 'a%'
AND CITY NOT LIKE 'e%'
AND CITY NOT LIKE 'i%'
AND CITY NOT LIKE 'o%'
AND CITY NOT LIKE 'u%')
OR (CITY NOT LIKE '%a' AND
CITY NOT LIKE '%e' AND
CITY NOT LIKE '%i' AND
CITY NOT LIKE '%o' AND
CITY NOT LIKE '%u')
Это работает для меня
SELECT DISTINCT CITY FROM STATION WHERE NOT CITY RLIKE '^[AEIOUaeiou]' AND NOT CITY RLIKE '.*[AEIOUaeiou]$'
mySQL query:
SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou]' OR CITY REGEXP '[^aeiou]$'
Решение Oracle:
SELECT DISTINCT CITY FROM STATION WHERE
NOT REGEXP_LIKE(UPPER(CITY), '^[AEIOU]') OR
NOT REGEXP_LIKE(UPPER(CITY), '[AEIOU]$');
Правильно ответь на это,
SELECT DISTINCT CITY FROM STATION
WHERE NOT CITY RLIKE '^[AEIOUaeiou]' AND NOT CITY RLIKE '.*[AEIOUaeiou]$';
select distinct city
from station
where city not RLIKE '^[aeiou]' and city not RLike '[aeiou]$'
Ответы, содержащие только код, не считаются полными
запрос mysql:
SELECT DISTINCT city FROM station WHERE city NOT REGEXP '^[aeiouAEIOU].*[aeiouAEIOU]$';
select distinct city
from station
where not lower(substr(city,1,1)) in ('a','e','i','o','u')
or not lower(substr(city,-1,1)) in ('a','e','i','o','u');
Следующий запрос должен делать то, что вы хотите. У меня это сработало успешно!
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT RLIKE '^[aeiouAEIOU]' OR CITY NOT RLIKE '[aeiouAEIOU]$'
Избегайте использования заглавных букв в операторах!
Это сработало для меня с использованием MYSQL. Так же сгруппировал результаты по городам, что не нужно ... чуть красивее:
select distinct CITY
from STATION
where CITY NOT RLIKE '^[aeiouAEIOU]'
OR CITY NOT RLIKE '[AEIOUaeiou]$'
GROUP BY CITY;
Вы можете попробовать это для MySQL:
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY NOT REGEXP '^[aeiou]'
AND CITY NOT REGEXP '[aeiou]$';
Этот запрос предоставит вам желаемый результат для заданного вопроса.
Это будет работать так, как вы хотите:
SELECT city
FROM station
WHERE left(city,1) not regexp 'a|e|i|o|u' or right(city,1) not regexp 'a|e|i|o|u'
GROUP BY city
Добро пожаловать в SO. Вы должны добавить некоторые пояснения, а также отформатировать код (в данном случае с тройными обратными кавычками и подсказкой по синтаксису sql).
SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou]|[^aeiou]$';
это то, что ты ищешь, братан.
SELECT distinct city FROM station
WHERE City not LIKE '[aeiou]%' and CITY NOT LIKE '%[aeiou]'
В MySQL регулярные выражения такие же, как в Python.
В этом случае вы также можете использовать регулярные выражения.
Запрос будет таким:
select distinct(city) from station where not (city rlike '^[aeiouAEIOU]' and city rlike '[aeiouAEIOU]$');
Предполагая, что вы видели этот вопрос о ранге хакера и учитывая ваш снимок экрана со схемой таблицы STATION, также говорится о том же. Вот мой ответ, и он сработал для меня в MYSQL.
select DISTINCT(city) from STATION where CITY REGEXP '^[^aeiou]' or CITY REGEXP '.*[^aeiou]$';
Это необходимое решение для MS SQL SERVER,
select distinct city from station where city not like '[aeiouAEIOU]%' and city not like '%[aeiouAEIOU]'
Как насчет этого:
SELECT CITY from STATION WHERE LOWER(CITY) NOT REGEXP '^[aeiou].*[aeiou]$' GROUP BY CITY
Добро пожаловать в stackoverflow! Предоставляя ответы, добавьте контекст, объясняющий, что происходит в вашем коде. Ответы, содержащие только код, не считаются полными.
Оператор MySQL RLIKE выполняет сопоставление строкового выражения с шаблоном. Шаблон предоставляется в качестве аргумента.
SELECT DISTINCT city FROM station
WHERE city NOT RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';
Ссылка: https://www.w3resource.com/mysql/string-functions/mysql-rlike-function.phphttps://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY,1,1) NOT IN ('A','E','I','O','U') OR
SUBSTR(CITY,-1,1) NOT IN ('a','e','i','o','u');
Добро пожаловать в StackOverflow! Пожалуйста, отредактируйте свой вопрос, чтобы включить объяснение вашего кода. У этого вопроса больше, чем две дюжины других ответов, многие из которых имеют хорошие объяснения. Без ответа он будет сравнительно низкого качества и, скорее всего, будет отклонен или удален. Добавление этого объяснения поможет оправдать дальнейшее существование вашего ответа здесь.
Попробуй это:
SELECT DISTINCT CITY FROM STATION WHERE CITY NOT RLIKE '^[aeiouAEIOU]'
AND
CITY NOT RLIKE '[aeiouAEIOU]$'
Поскольку упоминается требование о том, что начало и конец не должны быть гласными, здесь мы можем использовать шаблон, используя RLIKE:
выберите город, отличный от станции, где (left (city, 1) не в ('a', 'e', 'i', 'o', 'u') и right (city, 1) не в ('a', 'e', 'i', 'o', 'u'));
MySQL
Ответ на вопрос «не начинайте с гласных и не заканчивайте на гласные»: ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ГОРОД НА СТАНЦИИ WHERE NOT CITY RLIKE '^ [AEIOUaeiou]' or NOT CITY RLIKE '. * [AEIOUaeiou] $';
Ответ на вопрос «Не начинайте с гласных и не заканчивайте гласными»: ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ГОРОД НА СТАНЦИИ WHERE NOT CITY RLIKE '^ [AEIOUaeiou]' И НЕ CITY RLIKE '. * [AEIOUaeiou] $';
Добро пожаловать в SO! Первый ответ идентичен принятому ответу: stackoverflow.com/posts/49229048/revisions, и его достаточно, чтобы ответить на вопрос. Второй ответ не отвечает на вопрос, не начинаться ли с гласных или не заканчиваться на гласные. Ваш ответ либо повторяет предыдущий ответ, либо не добавляет дополнительной полезной информации.
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiouAEIOU]|[^aeiouAEIOU]$'
для оракула попробуйте это:
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY,'^.*[^aeiouAEIOU]$')
UNION
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY,'^[^aeiouAEIOU].*$');
Решением вашего вопроса должен стать следующий запрос:
select DISTINCT CITY from STATION where CITY NOT LIKE '[a,e,i,o,u]%' OR
CITY NOT LIKE '%[a,e,i,o,u]'
MYSQL:
Select distinct city from station where city not regexp '^[aeiou].*[aeiou]$'
ОБЪЯСНЕНИЕ : Использование регулярного выражения и условия НЕ. Таким образом, в основном это поиск города, который начинается с гласных '^ [aeiou]', соединенных значениями 'n' между ними через '.' оператор и второе условие окончания гласными '[aeiou] $'. И в конце, поскольку применяется условие НЕ, отфильтровываются и отображаются только те, которые не соответствуют критериям.
Хотя этот код может решить проблему OP, лучше всего включить объяснение того, как ваш код решает проблему OP. Таким образом, будущие посетители могут извлечь уроки из вашего сообщения и применить его к своему собственному коду. SO - это не сервис кодирования, а ресурс знаний. Кроме того, больше шансов получить качественные и полные ответы. Эти функции, наряду с требованием, чтобы все сообщения были автономными, являются одними из сильных сторон SO как платформы, которые отличает ее от форумов. Вы можете редактировать, чтобы добавить дополнительную информацию и / или дополнить свои пояснения исходной документацией.
SELECT DISTINCT CITY
FROM STATION
WHERE
SUBSTRING(CITY,1,1) NOT IN ('A','E','I','O','U')
OR
SUBSTRING(CITY,1,1) NOT IN ('a','e','i','o','u')
Этот код работает для MS SQL SERVER.
ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ГОРОД НА СТАНЦИИ, ГДЕ ГОРОД НЕ похож на "% a" и ГОРОД НЕ похож на "% i" и CITY НЕ нравится "% e", и CITY НЕ нравится "% o", а CITY НЕ нравится "% u";
Для MySQL
Select DISTINCT CITY from STATION where CITY REGEXP '^[^aeiou]|[^aeiou]$';
Для Oracle: select DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY,'^[^aeiou]|[^aeiou]$','i');
Что это за БД? Большинство БД не поддерживают регулярные выражения. Используйте функции, которые поддерживает ваша БД.