Запросить список названий 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
- Используя регулярное выражение
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY REGEXP '^[aeiou]';
- Используя ИЛИ
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%");
- Используя
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]%'