sql >> Base de Datos >  >> RDS >> Oracle

salida que tiene la primera y la última letra como vocal (a,e,i,o,u)

Suponiendo que todos los nombres de las ciudades estén en minúsculas, podría hacer algo como esto:

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) toma la subcadena de city comenzando en la posición 1 y de longitud 1 (es decir, solo la primera letra). substr(city, -1, 1) es muy similar, solo que la posición es diferente:-1 significa primera letra desde el final de la cadena, por lo que obtendrá la última letra del nombre de la ciudad.

Si city puede tener letras mayúsculas y minúsculas, en WHERE uso de la cláusula lower(city) en lugar de city .

EDITAR :Por petición popular, así es como se puede hacer lo mismo con las expresiones regulares. Sin embargo, no tiene sentido usar un enfoque de expresión regular aquí; es casi seguro que las funciones de cadena estándar (como SUBSTR) serán mucho más rápidas que cualquier función basada en expresiones regulares.

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

(a|e|i|o|u) significa exactamente uno de esos caracteres. ^ significa ancla al comienzo de la cadena, y de manera similar $ al final de la cadena. Estrictamente hablando, esto requiere que el nombre de la ciudad tenga al menos dos letras; si los nombres de ciudades de una letra son posibles, esto se puede modificar fácilmente. (El enfoque SUBSTR no requeriría cambios).

El último argumento, 'i' , hace que la expresión regular coincida con mayúsculas y minúsculas (en caso de que sea necesario).