Получите название города, которое не начинается с гласных или не заканчивается гласными

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

Формат ввода

Таблица STATION описывается следующим образом:

Получите название города, которое не начинается с гласных или не заканчивается гласными

Я пишу запрос ниже, но работает нормально. Любое предложение?

SELECT DISTINCT city FROM station WHERE city NOT RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';

Что это за БД? Большинство БД не поддерживают регулярные выражения. Используйте функции, которые поддерживает ваша БД.

Ari Singh 12.03.2018 07:00

Чем не работает?

klutt 12.03.2018 08:10

Какой СУБД вы используете? «SQL» - это просто язык запросов, а не название конкретного продукта базы данных. Добавьте тег для продукта базы данных, который вы используете postgresql, oracle, sql-server, db2, ...

a_horse_with_no_name 12.03.2018 09:56

@AriSingh: на самом деле большинство СУБД делать поддерживают регулярные выражения. Но поскольку настоящего стандарта SQL нет (по крайней мере, для реального регулярного выражения POSIX), синтаксис сильно различается для каждого продукта СУБД.

a_horse_with_no_name 12.03.2018 09:57

"или / или" звучит так, будто оба может начинаться и заканчиваться на гласной?

Hans Kesting 12.03.2018 10:55

На основе использования типа данных VARCHAR2 база данных Oracle.

Piro says Reinstate Monica 12.03.2018 22:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
16
6
57 674
41
Перейти к ответу Данный вопрос помечен как решенный

Ответы 41

Ответ принят как подходящий

Предполагая, что вы используете MySQL, вот что вы ищете

SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*|.*[^AEIOUaeiou]$';

Сноска: RLIKE и ОТЧЕТЛИВЫЙ

Вы предполагаете, что OP использует MySQL. Ответ на вопрос, который нерешительно помечен, только сбивает с толку любого, кто задает аналогичный вопрос.

Peter Abolins 12.03.2018 10:07

Дать согласие! Отредактировал свой ответ, хотя я только что изменил запрос в ответе OP. Хотя RLIKE отличается для баз данных diff

Anand G 12.03.2018 10:13

В MySQL RLIKE и REGEXP эквивалентны.

Barmar 07.07.2019 09:33

@AnandG Что будет в MS SQL Server?

Taylor 01.08.2019 14:21

Этот 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] $', как понять запятую и звездочку здесь? Я видел, что это популярный ответ, но теперь знаю, как понять. *

emily_relax 09.02.2021 06:05

1. запятой нет, проверьте пожалуйста. 2. .* означает, что строка должна начинаться с любого из (aeiou) и может иметь ноль или более повторений этой буквы.

AB Abhi 17.02.2021 15:49
 SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].* 
 [^aeiouAEIOU]$';

Вы должны поместить символ вставки в квадратные скобки, что означает отсутствие гласных. Здесь - объяснение

Работает в MySQL.

Suresh Mangs 02.10.2020 14:55

Исправление вышеуказанного оператора с использованием 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]'

ergohack 02.11.2018 00:22

Я работал с этим

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')

Объясните, почему это правильный ответ, и отформатируйте код.

Safiyya 29.01.2019 13:42
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')

пожалуйста, ответ будет более полным, если вы добавите текст пояснения к своему решению.

Enea Dume 30.01.2019 11:09

Попробуй это:

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]$'

Ответы, содержащие только код, не считаются полными

Ivan Kaloyanov 13.06.2019 17:36

запрос 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]$'

Избегайте использования заглавных букв в операторах!

MJoy 11.07.2019 09:01

Это сработало для меня с использованием 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).

m02ph3u5 28.07.2019 17:13
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.

В этом случае вы также можете использовать регулярные выражения.

  1. Выберите города, которые начинаются и заканчиваются гласными.
  2. Затем поместите нет впереди, чтобы удалить эти города.

Запрос будет таким:

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! Предоставляя ответы, добавьте контекст, объясняющий, что происходит в вашем коде. Ответы, содержащие только код, не считаются полными.

brae 17.10.2019 22:36

Оператор 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! Пожалуйста, отредактируйте свой вопрос, чтобы включить объяснение вашего кода. У этого вопроса больше, чем две дюжины других ответов, многие из которых имеют хорошие объяснения. Без ответа он будет сравнительно низкого качества и, скорее всего, будет отклонен или удален. Добавление этого объяснения поможет оправдать дальнейшее существование вашего ответа здесь.

Das_Geek 22.11.2019 16:40

Попробуй это:

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, и его достаточно, чтобы ответить на вопрос. Второй ответ не отвечает на вопрос, не начинаться ли с гласных или не заканчиваться на гласные. Ваш ответ либо повторяет предыдущий ответ, либо не добавляет дополнительной полезной информации.

MBorg 06.01.2020 09:14
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 как платформы, которые отличает ее от форумов. Вы можете редактировать, чтобы добавить дополнительную информацию и / или дополнить свои пояснения исходной документацией.

ysf 15.06.2020 11:53
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');

Другие вопросы по теме