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?
Vous pouvez utiliser une expression regular :
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
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]'
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]$'
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');
Vous pouvez essayer une solution simple pour MySQL:
SELECT DISTINCT city FROM station WHERE city REGEXP "^[aeiou].*";
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)
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'
)
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');
Essayez ce qui suit:
select distinct city
from station
where city like '%[aeuio]'and city like '[aeuio]%' Order by City;
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'
Pour MS Access ou serveur MYSQL
SELECT city FROM station
WHERE City LIKE '[aeiou]%'and City LIKE '%[aeiou]';
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');
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')
Pour Oracle:
SELECT DISTINCT city
FROM station
WHERE REGEXP_LIKE(city, '^[aeiou].*[aeiou]$','i') ;
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')
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;
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[^aeiouAEIOU]'OR city RLIKE'[^aeiouAEIOU]$'
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*;
Essayez ce qui suit:
select distinct city from station where city REGEXP '^[aeiou]' and city REGEXP '[aeiou]$';