2010-07-27 20 views
13

Tengo una base de datos con muchas palabras para usar en un sistema de etiquetas. He creado el código necesario para un cuadro de autocompletar, pero no estoy seguro de cómo recuperar las entradas coincidentes de la base de datos de la manera más eficiente.¿Cómo recuperar entradas comenzando con la cadena dada desde una base de datos de SQL Server?

Conozco el comando LIKE, pero me parece que es más un comando EQUAL. Solo obtengo las palabras que se ven exactamente como la palabra en la que entro.

Mi plan es leer cada fila, y luego usar las funciones string.StartsWith() y string.Contains() de C# para encontrar palabras que pueden caber, pero estoy pensando que con una base de datos grande, puede ser ineficaz lea cada fila y luego filtre.

¿Hay alguna manera de leer solo las filas que comienzan con o contienen una cadena determinada de SQL Server?

Respuesta

29

Al usar like, proporciona un signo% como comodín. Si quiere cadenas que comiencen con Hello, debería usar LIKE 'Hello%' Si quiere cadenas con Hello en cualquier lugar de la cadena, usaría LIKE '% Hello%'

En cuanto a la eficiencia, usar Like no es óptimo . Debería buscar en la búsqueda de texto completo.

+0

De hecho, sabía sobre el signo%. Tonto de mi. Voy a buscar en la búsqueda de texto completo también. ¡Gracias! –

8

que sé del comando como, pero me parece que es más de un comando EQUAL. Solo obtengo las palabras que se ven exactamente como la palabra en la que entro.

Esto se debe a que no está utilizando comodines:

WHERE column LIKE 'abc%' 

... volverá filas en las que el valor column comienza con "abc". Señalaré que cuando se usan comodines, esta es la única versión que puede hacer uso de un índice en la columna column ... er.

WHERE column LIKE '%abc%' 

... volverá filas en las que el valor column contiene "abc" en cualquier parte de ella. Wildcarding el lado izquierdo de un LIKE garantiza que no se puede usar un índice.

SQL Server no admite expresiones regulares de forma nativa: debe usar las funciones CLR para obtener acceso a la funcionalidad. Pero funciona a la par con LIKE.

La búsqueda de texto completo (FTS) es la mejor forma de buscar texto.

+0

Si lo que busca es el carácter de subrayado, debe escapar de él: DONDE la columna LIKE '/ _%' ESCAPE '/' – Tommy

2

También puede implementar una funcionalidad StartWith usando las siguientes declaraciones:

Usar el wich se comporta mejor.

Cuestiones relacionadas