Eu tenho uma tabela com os seguintes textos e a palavra-chave que estou procurando é 'Pesquisar'. Então, escrevi uma consulta
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
[TextValue] LIKE '%Search%'
Q.1 Como posso modificar a consulta para que apenas os registros com 'Pesquisar' no texto sejam retornados e não deve ser 'LSearch'. ou seja, de acordo com a imagem, os três primeiros registros serão retornados apenas.?
Usando LIKE
Linha única como pesquisa:
Sem preenchimento, você precisará lidar especificamente com a string que aparece no início/final da string:
Usando o ÍNDICE FULLTEXT
Edit2, para os puristas de texto completo
CREATE FULLTEXT INDEX
nos estados do MSDN para a opção AUTO (o padrão)Então, pode não dar resultados corretos. Mas, alguns segundos depois, será.
Além disso, para algumas linhas de até 10.000, ele terá um desempenho adequado: escala O(n). Eu uso o LIKE em uma tabela com cerca de 25k linhas, mas os usuários sabem que terá um desempenho ruim se pesquisar dessa maneira (está em uma página "avançada"). Eu ganho na troca gerenciando um índice de texto completo
A pesquisa de texto completo não é a solução correta, é uma opção
Nota: A experiência me mostrou que a indexação FullText no SQL Server tem sérias implicações de desempenho, ou seja: Só implemente se realmente precisar e souber o que está fazendo! (@Andrew Bickerton)
Se sua tabela tiver uma quantidade não trivial de linhas, tente um índice FULLTEXT. Será muito mais rápido e corresponderá apenas à palavra exata.
Agora procure seu texto:
Mais sobre:
Não sei se o servidor SQL oferece suporte
\b
a regexes (correspondência no limite de palavras). E você terá que criar uma função definida pelo usuário para permitir a correspondência de regex em primeiro lugar , mas se isso acontecer, você pode corresponder em:Caso contrário, você ainda poderá combinar em: