operador - select sql server
Busque la "coincidencia de palabras completas" con el patrón SQL Server LIKE (5)
Índices de texto completo es la respuesta.
La alternativa pobre de los primos es
''.'' + column + ''.'' LIKE ''%[^a-z]pit[^a-z]%''
Para su información, a menos que esté utilizando la intercalación _CS, no hay necesidad de a-zA-Z
¿Alguien tiene un patrón LIKE
que coincida solo con palabras completas?
Debe tener en cuenta los espacios, la puntuación y el inicio / final de la cadena como límites de palabras.
No estoy utilizando la búsqueda de texto completo de SQL, ya que no está disponible. No creo que sea necesario para una búsqueda simple de palabras clave cuando LIKE
debería poder hacer el truco. Sin embargo, si alguien ha probado el rendimiento de la Búsqueda de texto completo en comparación con los patrones de LIKE
, me gustaría escuchar.
Editar:
Llegué a esta etapa, pero no coincide con el inicio / final de la cadena como un límite de palabra.
where DealTitle like ''%[^a-zA-Z]pit[^a-zA-Z]%''
Quiero que esto coincida con "pit" pero no con "spit" en una oración o como una sola palabra.
Por ejemplo, DealTitle
puede contener "un hoyo de desesperación" o " DealTitle
tu ingenio" o "un hoyo" o "un hoyo". o "pit!" o simplemente "pit".
Creo que los patrones recomendados excluyen las palabras con no tienen ningún carácter al principio o al final. Yo usaría los siguientes criterios adicionales.
where DealTitle like ''%[^a-z]pit[^a-z]%'' OR
DealTitle like ''pit[^a-z]%'' OR
DealTitle like ''%[^a-z]pit''
Espero que les ayude chicos!
Este es un buen tema y quiero complementarlo con alguien que necesita encontrar una palabra en una cadena que pasa esto como elemento de una consulta.
SELECT
ST.WORD, ND.TEXT_STRING
FROM
[ST_TABLE] ST
LEFT JOIN
[ND_TABLE] ND ON ND.TEXT_STRING LIKE ''%[^a-z]'' + ST.WORD + ''[^a-z]%''
WHERE
ST.WORD = ''STACK_OVERFLOW'' -- OPTIONAL
Con esto, puede enumerar todas las incidencias de ST.WORD
en ND.TEXT_STRING
y puede usar la regla WHERE
para filtrar esto usando alguna palabra.
Otra alternativa simple:
WHERE DealTitle like ''%[^a-z]pit[^a-z]%'' OR
DealTitle like ''[^a-z]pit[^a-z]%'' OR
DealTitle like ''%[^a-z]pit[^a-z]''
Puedes buscar la cadena completa en SQL:
select * from YourTable where col1 like ''%TheWord%''
Luego, podría filtrar el sitio cliente de las filas devueltas, agregando la condición adicional de que debe ser una palabra completa. Por ejemplo, si coincide con la expresión regular:
/bTheWord/b
Otra opción es usar una función CLR, disponible en SQL Server 2005 y superior. Eso le permitiría buscar el lado del servidor de expresiones regulares. Este artcile de MSDN tiene los detalles de cómo configurar una función dbo.RegexMatch
.