web-dev-qa-db-ja.com

名前が母音で始まり、母音で終わるかどうかを確認するSQLクエリ

最初の文字と最後の文字の両方に母音があるSTATION(id, city, longitude, latitude)テーブルからCITY名のリストを照会したい。結果に重複を含めることはできません。

このために、25の条件を持つWHERE NAME LIKE 'a%'のようなクエリを作成しました。各母音は他のすべての母音に対応しますが、これは非常に扱いにくいものです。それを行うためのより良い方法はありますか?

19
Zeus

正規表現 を使用できます。

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

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');
14

正規表現を使用します。

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の簡単なソリューションを1つ試すことができます。

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

次のクエリは、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');
3
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

以下を試してください:

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