it-swarm.com.ru

SQL-запрос, чтобы проверить, начинается ли имя и заканчивается ли гласным

Я хочу запросить список имен CITY из таблицы STATION(id, city, longitude, latitude), в которых гласные обозначены как их первый и последний символы. Результат не может содержать дубликаты.

Для этого я написал запрос наподобие WHERE NAME LIKE 'a%', в котором было 25 условий, каждый гласный для каждого другого гласного, что довольно громоздко. Есть ли лучший способ сделать это?

18
Zeus

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

SELECT DISTINCT city
FROM   station
WHERE  city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
45
Mureinik

в сервер Microsoft SQL вы можете добиться этого из запроса ниже:

SELECT distinct City FROM STATION WHERE City LIKE '[AEIOU]%[AEIOU]'

Или же

SELECT distinct City FROM STATION WHERE City LIKE '[A,E,I,O,U]%[A,E,I,O,U]'
11
Banketeshvar Narayan

Используйте регулярное выражение.

WHERE name REGEXP '^[aeiou].*[aeiou]$'

^ и $ привязывают совпадение к началу и концу значения.

В моем тесте это не будет использовать индекс для столбца name, поэтому ему нужно будет выполнить полное сканирование, как если бы

WHERE name LIKE 'a%a' OR name LIKE 'a%e' ...

Я думаю, чтобы использовать индекс, нужно использовать объединение запросов, каждый из которых проверяет первую букву.

SELECT * FROM table
WHERE name LIKE 'a%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'e%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'i%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'o%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'u%' AND name REGEXP '[aeiou]$'
11
Barmar

Вы можете попробовать это

    select city
    from station where SUBSTRING(city,1,1) in ('A','E','I','O','U') and 
    SUBSTRING(city,-1,1) in ('A','E','I','O','U');
4
Suman

Вы можете попробовать одно простое решение для MySQL:

SELECT DISTINCT city FROM station WHERE city REGEXP "^[aeiou].*";
4
Ganesh Giri

Вы можете подстроку первого и последнего символа и сравнить его с ключевым словом IN,

WHERE SUBSTRING(NAME,1,1) IN (a,e,i,o,u) AND SUBSTRING(NAME,-1) IN (a,e,i,o,u) 
4
ogres
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%'
) AND (CITY LIKE '%a' 
    OR CITY LIKE '%e'
    OR CITY LIKE '%i'
    OR CITY LIKE '%o'
    OR CITY LIKE '%u'
)
3
Pankaj Pathak

Следующий запрос будет делать для Orale DB:

select distinct(city) from station where upper(substr(city, 1,1)) in ('A','E','I','O','U') and upper(substr(city, length(city),1)) in ('A','E','I','O','U');
2
shivanshu dhawan

Попробуйте следующее:

select distinct city 
from station 
where city like '%[aeuio]'and city like '[aeuio]%' Order by City;
2
abhinay vijay

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

SELECT DISTINCT CITY 
FROM STATION
WHERE CITY LIKE 'A%A' OR CITY LIKE 'E%E' OR CITY LIKE 'I%I' OR CITY LIKE 'O%O' OR
CITY LIKE 'U%U' OR CITY LIKE 'A%E' OR CITY LIKE 'A%I' OR CITY LIKE 'A%O' OR 
CITY LIKE 'A%U' OR CITY LIKE 'E%A' OR CITY LIKE 'E%I' OR CITY LIKE 'E%O' OR 
CITY LIKE 'E%U' OR CITY LIKE 'I%A' OR CITY LIKE 'I%E' OR CITY LIKE 'I%O' OR 
CITY LIKE 'I%U' OR CITY LIKE 'O%A' OR CITY LIKE 'O%E' OR CITY LIKE 'O%I' OR 
CITY LIKE 'O%U' OR CITY LIKE 'U%A' OR CITY LIKE 'U%E' OR CITY LIKE 'U%I' OR 
CITY LIKE 'U%O'
1
mayur nandu

Для MS Access или MYSQL сервера

SELECT city FROM station
WHERE City LIKE '[aeiou]%'and City LIKE '%[aeiou]';
1
srishti gupta

В Oracle:

SELECT DISTINCT city 
FROM station 
WHERE SUBSTR(lower(CITY),1,1) IN ('a','e','i','o','u') AND SUBSTR(lower(CITY),-1) IN ('a','e','i','o','u');
0
Murali

В MSSQL это может быть так:

select distinct city from station 
where
right(city,1) in ('a', 'e', 'i', 'o','u') and left(city,1) in ('a', 'e', 'i', 'o','u') 
0
Ashwini M

Для Oracle:

SELECT DISTINCT city
FROM   station
WHERE REGEXP_LIKE(city, '^[aeiou].*[aeiou]$','i') ;
0
ishan Kankane

Вы можете использовать функции LEFT() и RIGHT() . Left(CITY,1) получит первый символ CITY слева. Right(CITY,1) получит первый символ CITY справа (последний символ CITY).

DISTINCT используется для удаления дубликатов. Чтобы сделать сравнение без учета регистра, мы будем использовать функцию LOWER() .

SELECT DISTINCT CITY
FROM STATION
WHERE LOWER(LEFT(CITY,1)) IN ('a', 'e', 'i', 'o', 'u') AND
      LOWER(RIGHT(CITY,1)) IN ('a', 'e', 'i', 'o', 'u')
0
Madhur Bhaiya

Оба приведенных ниже утверждения работают в Microsoft SQL SERVER

SELECT DISTINCT
    city
FROM
    station
WHERE
    SUBSTRING(lower(CITY), 1, 1) IN ('a', 'e', 'i', 'o', 'u')
    AND SUBSTRING(lower(CITY), LEN(CITY), 1) IN ('a', 'e', 'i', 'o', 'u');

SELECT DISTINCT
    City
FROM
    Station
WHERE
    City LIKE '[A, E, O, U, I]%[A, E, O, U, I]'
ORDER BY
    City;
0
Arthur W
SELECT DISTINCT city
FROM   station
WHERE  city RLIKE '^[^aeiouAEIOU]'OR city RLIKE'[^aeiouAEIOU]$'
0
Smita

Попробуйте это для начала с гласной

Oracle:

select distinct *field* from *tablename* where SUBSTR(*sort field*,1,1) IN('A','E','I','O','U') Order by *Sort Field*;
0
YogenderVarma

Попробуйте следующее:

select distinct city from station where city REGEXP '^[aeiou]' and city REGEXP '[aeiou]$';
0
Shivam Shakti