utilizar uso una tipos tabla nonclustered los full ejemplos consultar como clustered sql sql-server linq full-text-search

uso - tipos de indices en sql



Buscar palabras en el índice SQL Server (6)

WHERE BusinessName LIKE ''% Break%''

Necesito algo entre una búsqueda de texto completo y una búsqueda de índice:
Quiero buscar texto en una columna de mi tabla (probablemente también habrá un índice en la columna, si eso importa).

El problema es que quiero buscar palabras en la columna, pero no quiero hacer coincidir las partes.

Por ejemplo, mi columna puede contener nombres comerciales:
Mighty Muck Miller y Partners Inc.
Empresa de desayuno Boy & Butter

Ahora, si busco " Miller ", quiero encontrar la primera línea. Pero si busco " iller " no quiero encontrarlo, porque no hay palabras que comiencen con "iller". Sin embargo, la búsqueda de " Break " debería encontrar " Boy and Butter Breakfast company ", ya que una palabra comienza con " Break ".

Entonces si intento y uso

WHERE BusinessName LIKE %Break%

encontrará demasiados golpes.

¿Hay alguna forma de Buscar palabras separadas por espacios en blanco u otros delimitadores ?

(LINQ sería lo mejor, SQL simple también lo haría)

Importante: ¡los espacios no son, por lejos, los únicos delimitadores! Se deben considerar barras, puntos y puntos, todos los caracteres no alfanuméricos para que funcionen.


Los delimitadores de palabras van a ser muchos: espacio, tabulación, comienzo de línea, paréntesis, puntos, comas, exclamación / signos de interrogación, etc. Por lo tanto, una solución bastante simple es usar una expresión regular en su cláusula WHERE. (Y va a ser mucho más eficiente que solo ORear todos los delimitadores posibles que pueda imaginar).

Desde que mencionaste LINQ, aquí hay un artículo que describe cómo hacer una consulta eficiente de expresiones regulares con SQL Server .

Las cláusulas WHERE complicadas como esta siempre plantean una bandera roja conmigo en lo que respecta al rendimiento, por lo que definitivamente sugiero comparar lo que sea que termine con, después de todo, puede decidir crear un índice de búsqueda para la columna.

EDITAR: vi que editaste tu pregunta. Al escribir su expresión regular , es fácil simplemente usar cualquier carácter que no sea alfanumérico como delimitador, es decir [^ 0-9a-zA-Z], o / W para cualquier carácter que no sea una palabra, / b para cualquier límite de palabra y / B para cualquier límite que no sea palabra. O bien, en lugar de delimitadores coincidentes, simplemente haga coincidir cualquier palabra, es decir, / w +. Aquí hay otro ejemplo de alguien que realiza búsquedas de expresiones regulares con SQL Server (más complicado de lo que necesitaría).


Mencionaste LINQ - podrías hacer algo como ...

string myPattern = "% Break%"; var query = from b in Business where SqlMethods.Like(b.BusinessName, myPattern) select b;

Tenga en cuenta que esto utiliza el espacio de nombres System.Linq.Data.SqlClient que se traduce directamente en el operador LIKE sin procesamiento adicional.


where BusinessName like ''Break%'' -- to find if it is beginning with the word or BusinessName like ''% Break%'' -- to find if it contains the word anywhere but the beginning


SQL Server 2000 o superior.

SELECT * FROM dbo.TblBusinessNames WHERE BusinessName like ''%[^A-z^0-9]Break%'' -- In the middle of a sentence OR BusinessName like ''Break%'' -- At the beginning of a sentence

Referencia de palabras clave para LIKE : http://msdn.microsoft.com/en-us/library/aa933232(SQL.80).aspx


Prueba esto:

declare @vSearch nvarchar(100) set @vSearch = ''About'' select * from btTab where '' '' + vText + '' '' LIKE ''%[^A-z^0-9]'' + @vSearch + ''[^A-z^0-9]%''