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?
Sie könnten einen regulären Ausdruck verwenden :
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
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]'
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]$'
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');
Sie können eine einfache Lösung für MySQL ausprobieren:
SELECT DISTINCT city FROM station WHERE city REGEXP "^[aeiou].*";
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)
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'
)
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');
Versuche Folgendes:
select distinct city
from station
where city like '%[aeuio]'and city like '[aeuio]%' Order by City;
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'
Für MS Access- oder MYSQL-Server
SELECT city FROM station
WHERE City LIKE '[aeiou]%'and City LIKE '%[aeiou]';
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');
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')
Für Oracle:
SELECT DISTINCT city
FROM station
WHERE REGEXP_LIKE(city, '^[aeiou].*[aeiou]$','i') ;
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')
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;
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[^aeiouAEIOU]'OR city RLIKE'[^aeiouAEIOU]$'
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*;
Versuche Folgendes:
select distinct city from station where city REGEXP '^[aeiou]' and city REGEXP '[aeiou]$';