La guía paso a paso o código que verás en este post es la resolución más fácil y válida que hallamos a tus dudas o dilema.
Solución:
Podrías usar una expresión regular:
SELECT DISTINCT city
FROM station
WHERE city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
en Servidor SQL de Microsoft puede lograr esto desde la siguiente consulta:
SELECT distinct City FROM STATION WHERE City LIKE '[AEIOU]%[AEIOU]'
O
SELECT distinct City FROM STATION WHERE City LIKE '[A,E,I,O,U]%[A,E,I,O,U]'
Actualización: consulta de Oracle agregada
–Forma 1 –Debería funcionar en todas las versiones de Oracle
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(LOWER(CITY), '^[aeiou]') and REGEXP_LIKE(LOWER(CITY), '[aeiou]$');
–Forma 2 –puede fallar en algunas versiones de Oracle
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(LOWER(CITY), '^[aeiou].*[aeiou]');
–Forma 3 –puede fallar en algunas versiones de Oracle
SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]', 'i');
Usa una expresión regular.
WHERE name REGEXP '^[aeiou].*[aeiou]$'
^
y $
ancla la coincidencia al principio y al final del valor.
En mi prueba, esto no usará un índice en el name
columna, por lo que tendrá que realizar un análisis completo, como lo haría
WHERE name LIKE 'a%a' OR name LIKE 'a%e' ...
Creo que para que use un índice, necesitaría usar una unión de consultas que prueben la primera letra.
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]$'
Reseñas y calificaciones del post
Si crees que te ha sido de utilidad este artículo, sería de mucha ayuda si lo compartieras con el resto juniors así contrubuyes a difundir nuestra información.