Oracle
 sql >> Database >  >> RDS >> Oracle

output che ha la prima e l'ultima lettera come vocale(a,e,i,o,u)

Supponendo che tutti i nomi delle città siano tutte lettere minuscole, potresti fare qualcosa del genere:

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) prende la sottostringa di city a partire dalla posizione 1 e di lunghezza 1 (cioè solo la prima lettera). substr(city, -1, 1) è molto simile, solo la posizione è diversa:-1 significa prima lettera dalla fine della stringa - quindi questo ti darà l'ultima lettera del nome della città.

Se city può avere sia lettere maiuscole che minuscole, nel WHERE clausola use lower(city) invece di city .

MODIFICA :A grande richiesta, ecco come si può fare lo stesso con le espressioni regolari. Tuttavia, non ha senso usare un approccio di espressione regolare qui; le funzioni di stringa standard (come SUBSTR) sono quasi sicuramente molto più veloci di qualsiasi altra cosa basata su espressioni regolari.

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

(a|e|i|o|u) significa esattamente uno di quei caratteri. ^ significa ancora all'inizio della stringa, e allo stesso modo $ alla fine della stringa. A rigor di termini, ciò richiede che il nome della città sia lungo almeno due lettere; se sono possibili nomi di città di una lettera, questo può essere modificato facilmente. (L'approccio SUBSTR non richiede modifiche.)

L'ultimo argomento, 'i' , rende insensibile la corrispondenza tra maiuscole e minuscole (solo nel caso in cui sia necessario).