Запросить список названий CITY, начинающихся с гласных (то есть, a, e, i, o или u) из STATION

Запросить список CITY имена, начинающиеся с гласных (то есть, a, e, i, o или u) из STATION,

Мой ответ / проверенный код:

select city from station where REGEXP_LIKE(city,'[^aeiou]+');

Но это не кажется правильным.

Пожалуйста, помогите мне с этим.

18 ответов

Использование SUBSTR

select t.city from station t where lower(SUBSTR(city,1,1)) in ('a','e','i','o','u')

Как уже прокомментировал BackSlash, вы написали неправильно REGEXP_LIKE шаблон, и вы должны изменить его на '^[aeiou].+'или вы можете даже пропустить .+ из вашего шаблона, так как вас интересует только первая буква вашей строки (содержащая более 1 символа):

select city from station where REGEXP_LIKE(city,'^[aeiou]');

Пример с тестовыми данными

Остерегайтесь, что вернутся только те станции, которые начинаются с строчных гласных букв! Если вы также хотите включить прописные гласные, то добавьте их в свой шаблон:

select city from station where REGEXP_LIKE(city,'^[aeiouAEIOU]');

или указать внутри REGEXP_LIKE вызовите, что введенный шаблон нечувствителен к регистру с 'i' флаг, вот так:

select city from station where REGEXP_LIKE(city,'^[aeiou]', 'i');

Пример с тестовыми данными

Слава MT0 для полезного комментария!

Я надеюсь, что мы помогли!

Другой способ получить результат

      select distinct CITY from STATION where left(city,1) in ('a', 'e', 'i', 'o', 'u')

Все 3 работают на MySQL

  1. Используя регулярное выражение
      SELECT DISTINCT(CITY)
FROM STATION 
WHERE CITY REGEXP '^[aeiou]';
  1. Используя ИЛИ
      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%");
  1. Используя SUBSTR(string, start, length).
    SUBSTR - это индексирование на основе 1.
    Следовательно, SUBSTR(CITY, 1, 1) означает извлечение подстроки в позиции 1 длиной 1 из CITY столбец.
      SELECT DISTINCT(CITY)
FROM STATION 
WHERE SUBSTR(CITY, 1, 1) IN ('A', 'E', 'I', 'O', 'U');

На сервере MSSQL:

      SELECT DISTINCT(CITY) FROM STATION WHERE CITY LIKE '[a,e,i,o,u]%' ;

В MySQL:

      SELECT DISTINCT(CITY) FROM STATION WHERE SUBSTR(CITY,1,1) IN ('a','e','i','o','u');

Это можно решить, используя подстроку и нижние функции:

      SELECT CITY FROM STATION WHERE LOWER(SUBSTR(CITY,1,1)) in ('a','e','i','o','u');

substring найдет первый символ строки, а функция lower сделает этот первый символ ниже. Как только мы найдем первый нижний символ, мы сможем определить, гласный он или нет, используя оператор IN.

Попробуйте с решением MySQL:

select distinct CITY from STATION where substr(CITY,1,1) in ('a','e','i','o','u');

Здесь "отличное" решает проблему дублирования значения, а функция "подстрока" извлекает подстроку из строки. Подстрока также содержит начало и длину. Подробности по ссылке:- https://www.w3schools.com/sql/func_mysql_substr.asp

Я поделюсь двумя ответами, в частности, для PostgreSQL. Первый запрос возвращает города, которые начинаются с гласной с помощью ILIKE:

      SELECT city 
FROM table  
WHERE city ILIKE 'A%' 
OR city ILIKE 'E%' 
OR city ILIKE 'I%' 
OR city ILIKE 'O%' 
OR city ILIKE 'U%';

Оператор ILIKE используется для поиска совпадений без учета регистра, поэтому поиск заглавных гласных также автоматически приводит к поиску строчных букв.

Однако, на мой взгляд, этот запрос слишком длинный и избыточный. Можно ли переписать этот запрос без стольких условий? Да!

Давайте использовать SIMILAR TO:

      SELECT city
FROM patients
WHERE city SIMILAR TO '[aeiouAEIOU]%'
ORDER BY city ASC;

Это вернет все строки из таблицы, в которых столбец города начинается с гласной (т. е. «а», «е», «и», «о» или «у»). Символ % используется в качестве подстановочного знака для соответствия любому количеству символов.

Обратите внимание, что SIMILAR TO и LIKE не совпадают в PostgreSQL.

SIMILAR TO используется для сопоставления строки с шаблоном, который может включать регулярные выражения. Например, вы можете использовать SIMILAR TO, чтобы найти все строки, начинающиеся с гласной, используя шаблон «[AEIOU]%».

LIKE используется для сопоставления строки с шаблоном, не содержащим регулярных выражений. Он похож на оператор =, за исключением того, что он позволяет использовать подстановочные знаки % и _ для соответствия любому количеству или одному символу соответственно. Например, вы можете использовать LIKE, чтобы найти все строки, начинающиеся с гласной, используя шаблон «A%».

Для Mysql это сработало для меня -

        select DISTINCT(CITY) from STATION 
  where CITY REGEXP '^[aeiou].*';

Это решение ниже предназначено для MySQL DATABASE

       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%';
      select distinct city from station where city ~*'^(a|e|i|o|u)[a-z]$';

Это для Postgres

      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%";

Это сработало для меня

SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[aeiou]'

выберите город, отличный от станции, где regexp_like (city, '[aeiou] $', 'i')$- для окончания на, i - для нечувствительности к регистру, также выберет города, заканчивающиеся прописными буквами.

      with cte as (
select CITY ,case when lower(substr(CITY,1,1)) in ('a','e','i','o','u') then 1 else 0 end as Rule2
    from STATION
)
select distinct CITY  from cte where Rule2=1;

Мы можем использовать регулярное выражение в сочетании с REGEXP_LIKE

MySQL

      SELECT DISTINCT CITY 
FROM STATION
WHERE REGEXP_LIKE(city,'^[AEIOU]');
      SELECT DISTINCT CITY FROM STATION WHERE SUBSTR(CITY,1,1) IN ('A','E','I','O','U')
SELECT distinct(city)
FROM station
WHERE city LIKE '[a,e,i,o,u]%'
Другие вопросы по тегам