SQL - REGEXP duda

   
Vista:

REGEXP duda

Publicado por Oli (1 intervención) el 24/10/2013 15:55:44
Hola, me estoy iniciando en la programación de SQL y lo encuentro bastante lioso..

En un ejercicio me piden los nombres de jugadores que empiecen por “A” y tengan al menos 2 vocales.

Tengo está consulta hecha.. SELECT * FROM jugador where nombre REGEXP '^A'; (la cual me cumple para sacarme los jugadores que empiezan por A)

en el caso de las vocales no se que sentencia agregar para que saquen solo los que tienen 2 vocales..

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

REGEXP duda

Publicado por leonardo_josue (878 intervenciones) el 28/10/2013 16:14:30
Hola Oli...

Como muchos otros foristas, olvidaste mencionar con qué BD estás trabajando... no sé por que razón el 90% de los que escriben aquí hacen lo mismo... Aunque todos los DBMS están basados sobre SQL, también tienen diferencias sintácticas importantes, por lo que es algo complicado darte una respuesta puntual...

Ahora bien, con respecto a tu problema, tengo algunas dudas. ¿Es absolutamente necesario que utilices Expresiones Regulares?

hay muchas maneras de matar una hormiga, pero utilizar una pistola es demasiado... y creo que en este es lo mismo... si bien las expresiones regulares sirven una barbaridad para encontrar patrones en cadenas, la verdad es que su construcción requiere de alguna práctica, y muchas pruebas... sin embargo hay muchas otras maneras para obtener lo que quieres sin necesidad de REGEXP, con un simple LIKE y REPLACE... pero insisto, si es requisito indispensable que utilices EXPRESIONES, también se puede hacer...

Dado que esto apunta a ser una tarea escolar, no creo que sea correcto darte una respuesta completa, la idea de las tareas es justamente que practiques... pero te puedo dar algunos tips que te pueden servir.

1. Verifica si tu DBMS permite hacer REPLACE con expresiones regulares, (no todos lo permiten por eso la importancia de decirnos con qué trabajas). Si permite hacer estos reemplazos, una forma de contar el número de vocales en una cadena, es ELIMINAR las vocales (o lo que es lo mismo, reemplazar las vocales por un vacio) y RESTAR a la LONGITUD de la cadena ORIGINAL la cadena resultante, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
+------+-------------+-----------+------+-----------+------------+
| id   | descripcion | long_orig | reem | long_reem | no_vocales |
+------+-------------+-----------+------+-----------+------------+
|    1 | uno         |         3 | n    |         1 |          2 |
|    2 | dos         |         3 | ds   |         2 |          1 |
|    3 | tres        |         4 | trs  |         3 |          1 |
|    4 | cuatro      |         6 | ctr  |         3 |          3 |
|    5 | cinco       |         5 | cnc  |         3 |          2 |
+------+-------------+-----------+------+-----------+------------+

Esta es una manera, sin embargo no es la única... la otra consistiría simplemente en encontrar un patrón de una cadena que contenga dos vocales... para esto simplemente debes encontrar todas las posibilidades y crear la expresion por partes, estas son:

1. las dos vocales al inicio (A[A|E|I|O|U]_)
2. la segunda vocal EN MEDIO: (A_[A|E|I|O|U]_)
3. la segunda vocal al final: (A_[A|E|I|O|U])

donde el guión bajo (_) indica que ahí puede venir CUALQUIER CARACTER QUE NO SEA VOCAL.

estas tres sentencias las puedes convertir fácilmente en tres expresiones regulares, y utilizar el operador OR para evaluar cualquiera de los casos...

En la red hay muchísimas páginas para probar tus expresiones regulares... una de mis preferidas es esta:

http://www.regexplanet.com/advanced/java/index.html

Aunque está pensada en JAVA, las expresiones regulares son válidas para todos los lenguajes, igual de debe servir.

Haz la prueba y nos comentas, si continuas con problemas postea algo de lo que intentaste hacer y con gusto tratamos de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar