Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

saída que tem primeira e última letra como vogal (a,e,i,o,u)


Supondo que todos os nomes das cidades sejam letras minúsculas, você pode fazer algo assim:
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) pega a substring de city começando na posição 1 e de comprimento 1 (ou seja, apenas a primeira letra). substr(city, -1, 1) é muito semelhante, apenas a posição é diferente:-1 significa a primeira letra do final da string - então isso lhe dará a última letra do nome da cidade.

Se city pode ter letras maiúsculas e minúsculas, no WHERE cláusula use lower(city) em vez de city .

EDITAR :Por solicitação popular, aqui está como o mesmo pode ser feito com expressões regulares. Não faz sentido usar uma abordagem de expressão regular aqui; as funções de string padrão (como SUBSTR) são quase certas de serem muito mais rápidas do que qualquer coisa baseada em expressões regulares.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')

(a|e|i|o|u) significa exatamente um desses caracteres. ^ significa âncora no início da string, e similarmente $ no final da corda. Estritamente falando, isso requer que o nome da cidade tenha pelo menos duas letras; se nomes de cidade de uma letra forem possíveis, isso pode ser modificado facilmente. (A abordagem SUBSTR não exigiria mudanças.)

O último argumento, 'i' , torna a correspondência regexp insensível a maiúsculas e minúsculas (apenas no caso de ser necessário).