Parece que você está realmente procurando por pesquisa de texto completo, especialmente porque você deseja ponderar as palavras.
Para usar
LIKE
, você terá que usar várias expressões (uma por palavra, por coluna), o que significa SQL dinâmico. Não sei qual idioma você está usando, então não posso fornecer um exemplo, mas você terá que produzir uma declaração assim:Para "Hula Hoops":
where (ProductName like '%hula%' or ProductName like '%hoops%')
and (Description like '%hula%' or Description like '%hoops%')
and (ShortName like '%hula%' or ShortName like '%hoops%')
etc.
Infelizmente, essa é realmente a única maneira de fazê-lo. Usar a pesquisa de texto completo permitiria reduzir seus critérios para um por coluna, mas você ainda terá que especificar as colunas explicitamente.
Como você está usando o SQL Server, vou arriscar um palpite de que essa é uma pergunta C#. Você teria que fazer algo assim (supondo que você esteja construindo o
SqlCommand
ou DbCommand
objetar-se; se você estiver usando um ORM, todas as apostas serão canceladas e você provavelmente não estaria perguntando isso de qualquer maneira):SqlCommand command = new SqlCommand();
int paramCount = 0;
string searchTerms = "Hula Hoops";
string commandPrefix = @"select *
from Products";
StringBuilder whereBuilder = new StringBuilder();
foreach(string term in searchTerms.Split(' '))
{
if(whereBuilder.Length == 0)
{
whereBuilder.Append(" where ");
}
else
{
whereBuilder.Append(" and ");
}
paramCount++;
SqlParameter param = new SqlParameter(string.Format("param{0}",paramCount), "%" + term + "%");
command.Parameters.Add(param);
whereBuilder.AppendFormat("(ProductName like @param{0} or Description like @param{0} or ShortName like @param{0})",paramCount);
}
command.CommandText = commandPrefix + whereBuilder.ToString();