Oracle
 sql >> Base de données >  >> RDS >> Oracle

sortie qui a la première et la dernière lettre comme voyelle (a, e, i, o, u)

En supposant que tous les noms de ville sont tous en lettres minuscules, vous pourriez faire quelque chose comme ceci :

select city
from   station
where  substr(city,  1, 1) in ('a', 'e', 'i', 'o', 'u')
  and  substr(city, -1, 1) in ('a', 'e', 'i', 'o', 'u')

substr(city, 1, 1) prend la sous-chaîne de city commençant à la position 1 et de longueur 1 (c'est-à-dire juste la première lettre). substr(city, -1, 1) est très similaire, seule la position est différente :-1 signifie la première lettre de la fin de la chaîne - cela vous donnera donc la dernière lettre du nom de la ville.

Si city peut avoir des lettres majuscules et minuscules, dans WHERE clause utiliser lower(city) au lieu de city .

MODIFIER :À la demande générale, voici comment la même chose peut être faite avec des expressions régulières. Il n'y a cependant aucun intérêt à utiliser une approche d'expression régulière ici; les fonctions de chaîne standard (comme SUBSTR) sont presque certaines d'être beaucoup plus rapides que tout ce qui est basé sur des expressions régulières.

....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')

(a|e|i|o|u) signifie exactement un de ces caractères. ^ signifie ancre au début de la chaîne, et de même $ en bout de chaîne. À proprement parler, cela nécessite que le nom de la ville contienne au moins deux lettres; si les noms de ville à une lettre sont possibles, cela peut être modifié facilement. (L'approche SUBSTR ne nécessiterait aucun changement.)

Le dernier argument, 'i' , rend la correspondance d'expression régulière insensible à la casse (juste au cas où cela serait nécessaire).