web-dev-qa-db-fra.com

Requête SQL pour vérifier si un nom commence et finit par une voyelle

Je veux interroger la liste des noms CITY de la table STATION(id, city, longitude, latitude) qui ont des voyelles comme premier et dernier caractères. Le résultat ne peut pas contenir de doublons.

Pour cela, j’ai écrit une requête du type WHERE NAME LIKE 'a%' qui comportait 25 conditions, chaque voyelle pour une autre voyelle, ce qui est assez compliqué. Y a-t-il une meilleure façon de le faire?

18
Zeus

Vous pouvez utiliser une expression regular :

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

dans Microsoft SQL Server vous pouvez y parvenir à partir de la requête ci-dessous:

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

Ou

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

Utilisez une expression régulière.

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

^ et $ ancrent la correspondance au début et à la fin de la valeur.

Dans mon test, cela n’utilisera pas d’index dans la colonne name, il faudra donc effectuer une analyse complète,

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

Je pense que pour lui faire utiliser un index, il faudrait utiliser une union de requêtes qui testent chacune la première lettre.

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

Vous pouvez essayer ceci

    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

Vous pouvez essayer une solution simple pour MySQL:

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

Vous pouvez sous-chaîne du premier et du dernier caractère et le comparer avec le mot-clé 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

La requête ci-dessous fera pour Oracle 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

Essayez ce qui suit:

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

vous pouvez aussi faire un code dur comme celui-ci, où vous vérifiez chaque cas possible, il est facile à comprendre pour les débutants 

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

Pour MS Access ou serveur MYSQL

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

Dans 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

Dans MSSQL, ceci pourrait être le chemin suivant:

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

Pour Oracle:

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

Vous pouvez utiliser LEFT() et RIGHT() fonctions. Left(CITY,1) obtiendra le premier caractère de CITY de gauche. Right(CITY,1) obtiendra le premier caractère de CITY de droite (dernier caractère de CITY).

DISTINCT est utilisé pour supprimer les doublons. Pour rendre la comparaison insensible à la casse, nous allons utiliser la fonction 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

Les deux instructions ci-dessous fonctionnent dans 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

Essayez ceci pour commencer avec une voyelle

Oracle:

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

Essayez ce qui suit:

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