web-dev-qa-db-de.com

SQL-Abfrage zur Überprüfung, ob ein Name mit einem Vokal beginnt und endet

Ich möchte die Liste der CITY-Namen aus der Tabelle STATION(id, city, longitude, latitude) abfragen, deren erste und letzte Zeichen Vokale enthalten. Das Ergebnis darf keine Duplikate enthalten.

Dafür habe ich eine Abfrage wie WHERE NAME LIKE 'a%' geschrieben, die 25 Bedingungen hatte, jeder Vokal für jeden anderen Vokal, was ziemlich unhandlich ist. Gibt es einen besseren Weg, dies zu tun?

18
Zeus

Sie könnten einen regulären Ausdruck verwenden :

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

in Microsoft SQL-Server Sie können dies durch folgende Abfrage erreichen:

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

Oder

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

Verwenden Sie einen regulären Ausdruck.

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

^ und $ verankern die Übereinstimmung mit dem Anfang und dem Ende des Werts.

In meinem Test wird kein Index für die Spalte name verwendet. Daher muss ein vollständiger Scan durchgeführt werden

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

Ich denke, um einen Index verwenden zu können, müssten Sie eine Vereinigung von Abfragen verwenden, die jeweils den ersten Buchstaben testen.

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

Sie können dies versuchen

    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

Sie können eine einfache Lösung für MySQL ausprobieren:

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

Sie können das erste und das letzte Zeichen als Teilzeichenfolge eingeben und mit dem Schlüsselwort IN vergleichen.

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

Die folgende Abfrage wird für Oracle DB ausgeführt:

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

Versuche Folgendes:

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

sie können auch einen harten Code wie diesen ausführen, in dem Sie jeden möglichen Fall überprüfen und für Anfänger leicht verständlich sind 

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

Für MS Access- oder MYSQL-Server

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

In 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

In MSSQL könnte dies der Weg sein:

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

Für Oracle:

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

Sie können die Funktionen LEFT() und RIGHT() verwenden. Left(CITY,1) erhält das erste Zeichen von CITY von links. Right(CITY,1) erhält das erste Zeichen von CITY von rechts (letztes Zeichen von CITY).

DISTINCT wird zum Entfernen von Duplikaten verwendet. Um den Vergleich zwischen Groß- und Kleinschreibung zu unterscheiden, verwenden wir die Funktion 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

Beide der folgenden Anweisungen funktionieren in 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

Versuchen Sie dies, um mit dem Vokal zu beginnen

Orakel:

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

Versuche Folgendes:

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