requete - update mysql




Requête SQL pour vérifier si un nom commence et se termine par une voyelle (11)

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

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


Utilisez une expression régulière.

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

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

Dans mon test, cela n'utilisera pas d'index sur la colonne de name , il faudra donc effectuer une analyse complète, comme le ferait

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

Je pense que pour utiliser un index, il faudrait utiliser une union de requêtes testant 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 sous-chaîne le premier et le 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) 

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]$'

Dans MSSQL, cela pourrait être le moyen:

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

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

Essayez ceci pour commencer avec la 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]$';

Pour l'accès MS ou le serveur MYSQL

SELECT city FROM station
WHERE City LIKE '[aeiou]%'and City LIKE '%[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 ville FROM station WHERE ville REGEXP "^ [aeiou]. *";







select