最初の文字と最後の文字の両方に母音があるSTATION(id, city, longitude, latitude)
テーブルからCITY
名のリストを照会したい。結果に重複を含めることはできません。
このために、25の条件を持つWHERE NAME LIKE 'a%'
のようなクエリを作成しました。各母音は他のすべての母音に対応しますが、これは非常に扱いにくいものです。それを行うためのより良い方法はありますか?
正規表現 を使用できます。
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
in Microsoft SQL server以下のクエリからこれを達成できます:
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]'
更新--Oracleクエリを追加
-方法1-すべてのOracleバージョンで動作するはずです
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(LOWER(CITY), '^[aeiou]') and REGEXP_LIKE(LOWER(CITY), '[aeiou]$');
--Way 2 --Oracleの一部のバージョンでは失敗する場合があります
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(LOWER(CITY), '^[aeiou].*[aeiou]');
-方法3-一部のバージョンのOracleで失敗する可能性があります
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]', 'i');
正規表現を使用します。
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]$'
あなたはこれを試すことができます
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');
MySQLの簡単なソリューションを1つ試すことができます。
SELECT DISTINCT city FROM station WHERE city REGEXP "^[aeiou].*";
最初と最後の文字をサブストリング化し、INキーワードと比較できます。
WHERE SUBSTRING(NAME,1,1) IN (a,e,i,o,u) AND SUBSTRING(NAME,-1) IN (a,e,i,o,u)
次のクエリは、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');
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'
)
以下を試してください:
select distinct city
from station
where city like '%[aeuio]'and city like '[aeuio]%' Order by City;
また、このようなハードコードを実行することもできます。ここでは、可能性のあるすべてのケースをチェックしています。初心者でも簡単に理解できます。
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'
MS AccessまたはMYSQLサーバーの場合
SELECT city FROM station
WHERE City LIKE '[aeiou]%'and City LIKE '%[aeiou]';
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');
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')
Oracleの場合:
SELECT DISTINCT city
FROM station
WHERE REGEXP_LIKE(city, '^[aeiou].*[aeiou]$','i') ;
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')
以下のステートメントは両方とも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]$'
母音で始めるためにこれを試してください
Oracle:
select distinct *field* from *tablename* where SUBSTR(*sort field*,1,1) IN('A','E','I','O','U') Order by *Sort Field*;
以下を試してください:
select distinct city from station where city REGEXP '^[aeiou]' and city REGEXP '[aeiou]$';