Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: cobein en Mayo 28, 2011, 01:19:29 pm
-
Buenas, tengo un problema al intentar hacer una busqueda de una palabra, por ejemplo si tengo "perro" se me pueden presentar estas situaciones.
utilizo "_" para indicar espacio asi es mas claro
perro_ <-la palabra esta al comienzo del registro y esta precedida de un espacio
_perro_ <-precedida y antecedidad por espacios
,perro_ <-antecedida por signo de puntuacion y esta precedida de un espacio
_perros, <- precedida por espacio pero la palabra completa no coicide esta tiene una s al final
son simplemente algunos ejemplos pueden darse mas casos pero es para dar una idea.
Gracias.
-
campo like '%'' & perro & ''%'
-
pero, haciendolo asi, me devuelve cualquier cosa que tenga el fragmento "perro" ej: 123perro1 o me equivoco ?
-
Quieres buscar todas los que tengan perro con los espacios pero no con otras letras??
En todo caso, como deseas el resultado?? que deseas excluir? porque sino podrias usar:
Filtro = "perro "
o'
Filtro = " perro"
campo like '%'' & Filtro & ''%"
de esa forma no te saldrá "123perro1" porque no es igual a "123 perro1"
Sino es asi, deberiamos partir por lo que quieres excluir.
-
YvanB es eso mismo lo que quiero y ahi esta el problema pense en hacer lo que decis pero me paso que con este tipo de filtro
Filtro = "perro "
o'
Filtro = " perro"
me siguen saliendo cosas como perro123 el el caso del 1ro, y 123perro en el caso del segundo y simplemente "perro" sin espacios ni nada queda excluido.
Lo que quiero buscar por ejemplo es la palabra perro, exactamente como esta escrita y puede o no tener espacios o elementos de puntuacion al principio o al final. Aclaro es solo la palabra perro y no palabras que contengan la secuencia "perro".
-
En mi BD yo he probado en usar (siguiendo tu ejemplo) "%perro %" y no me sale "perro123" pero si me sale "perro hambriento" y entiendo que no quieres que salga "perro hambriento" sino solo los que sean "perro".
Pues si es eso, entonces solo queda poner: campo = "perro", ahora no se, se me ocurre que si quiero admitir a
"perro."
"perro "
"perro,"
y unos pocos casos mas, pues no se creo que como los casos son pocos los identifico y envío la consulta con coma, punto, espacio, puntoycoma, no se me ocurre otra forma, porque campo="perro" solo te traerá los "perro" estrictamente, y si estrictamente quieres que te traiga "perro" con 4 o 5 casos mas (punto, coma, espacio...) pues yo mandaría la consulta con esos casos. Ejem
Filtro = "perro"
Campo = Filtro or Campo = Filtro & " " or Campo = Filtro & "," etc etc.
Si hubiera otra forma a mi también me gustaría saberlo.
-
Aca tengo algo funcional...
sQuery = "SELECT * FROM Test WHERE Test like '[;,.:! ]perro[;,.:! ]' OR Test like 'perro' OR Test like 'perro[;,.:! ]' OR Test like 'perro[;,.:! ]' "
como se puede apreciar esto esta muuuy lejos de ser elegante, el problema que encontre es que no se como agregar un NULO a la lista de wildcards o hacerla opcional.
algo asi [;,.:! NULL] o [;,.:! ] OR NULL
no se si se comprende... bueno por ahora sigo buscando.
Gracias por las respuestas!
-
En FB se pueden usar UDFs (Funciones Definidas por el Usuario) en la que se podría hacer mas elegante la consulta, no se si habrá algo similar en tu motor.
Como es que quieres ponerle Null??? no capto. Osea, no creo que exista un campo que contenga perro con null
asi que creo entender que te refieres a que el campo sea null, en ese caso yo usaria el iff con el Isnull y haciéndolo menos elegante aun. iff(isnull(campo), campo, otrodato). (ojo que en tu motor no sea isnull sino Is Null)
Lo de los corchetes que agrupan condiciones no me funciona a mi de manera natural, veré cual es la alternativa en mi motor.
-
Estoy usando ADO y access.
El tema con los corchetes y el null es asi:
'[,.]perro' <- en este caso .perro y ,perro entran el la condicion pero perro simplemente no porque busca uno de los dos caracteres especificados, es ahi donde entra el NULL que quiero, en este caso tengo ,. y me gustaria agregar un tercer caso que es cuando no hay nada antecediendo a perro.
No se si se comprende. Si no es asi voy a tratar de ser masclaro con un ejemplo.
-
bueno lo que necesitas es un poquito de orientacion en cuanto abfiltros
por ejemlo
ado.filter = "campo = '" & perro & "'"
eso te va a dar exactamente el fitro de perro pero solo perro osea que si tienes perro001 y perro solo te va a devolver perro y va a omitir el otro
otro ejemplo
ado.filter ="campo like '" & perro & "%'"
este filtro va a obtener todo lo que cntenga perro y lo que esta desues de eso por ejempo si tienes 1perro01, perro y perro001 obtendras perro y perro001 omitiendo el primero
otro ejemplo
ado.filter = "campo like '%" & perro & "%'"
obtendras todo registro que cojtenga la palabra perro
;)
-
bueno lo que necesitas es un poquito de orientacion en cuanto abfiltros
por ejemlo
ado.filter = "campo = '" & perro & "'"
eso te va a dar exactamente el fitro de perro pero solo perro osea que si tienes perro001 y perro solo te va a devolver perro y va a omitir el otro
otro ejemplo
ado.filter ="campo like '" & perro & "%'"
este filtro va a obtener todo lo que cntenga perro y lo que esta desues de eso por ejempo si tienes 1perro01, perro y perro001 obtendras perro y perro001 omitiendo el primero
otro ejemplo
ado.filter = "campo like '%" & perro & "%'"
obtendras todo registro que cojtenga la palabra perro
;)
Doctor, creo que a Cobein si le queda claro los conceptos sobre el manejo de like. Su tema es aceptar ciertos caracteres pero no todos y excluir el null.
A proposito, te quedan unas horas del dia sabado jejej
-
ok no habia leido todas las resuestas y yo creo aver escrito q apartir del sabado, no me puedes pedir que el primer dia libre me ocupe de todo verdad
-
Se que se va de tema. Pero creo que tendrias que hacer doble analisis. Uno usando like (si haces like 'perro', o es lo mismo que ='perro'?) y ademas analizarlo con Epresiones regulares (u otro metodo como recorrer caracter x caracter) desde la aplicacion.
No hay forma de que los corchetes indique que son condicionales como x ej agregando "?" despues de los mismos?
-
ok no habia leido todas las resuestas y yo creo aver escrito q apartir del sabado, no me puedes pedir que el primer dia libre me ocupe de todo verdad
Sorry no me había percatado, pensé que era hasta el sábado y no desde el sábado... jeje si es desde el sábado y no hay fecha limite tienes toda la vida tonses jajaja (broma)
-
Cobein, aun me intriga lo del corchete... la verdad no sabia que era posible hacer eso, aun no he investigado esto del corchete pero voy a probarlo, por el momento tengo dudas de que lo de los corchetes funcionen pero si lo has probado con [;,.:! ] tonses vere la forma de replicarlo en mi motor.
Me refiero a esto:
sQuery = "SELECT * FROM Test WHERE Test like '[;,.:! ]perro[;,.:! ]' OR Test like 'perro' OR Test like 'perro[;,.:! ]' OR Test like 'perro[;,.:! ]' "
-
Los corchetes funcionan de seguro, lo que no se son todas las reglas para poder aplicarlos correctamente.
-
no se si te puede servir esto, explica abajo de todo como usar los wildcards y como excluir los nulos desde access.
Access Query and Filter Criteria (http://www.fontstuff.com/access/acctut06.htm)
-
Perfecto Seba, ahi estaba la respuesta, para indicar nulo hay que usar dos comillas dobles asi '[;,.:! ""]perro[;,.:! ""]'
Solucionado, Gracias!