Wygląda na to, że naprawdę szukanie wyszukiwania pełnotekstowego, zwłaszcza jeśli chcesz ważyć słowa.
Aby użyć LIKE
, będziesz musiał użyć wielu wyrażeń (po jednym na słowo, na kolumnę), co oznacza dynamiczny SQL. Nie wiem, jakiego języka używasz, więc nie mogę podać przykładu, ale musisz stworzyć takie oświadczenie:
Dla "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%')
itp.
Niestety, to naprawdę jedyny sposób, aby to zrobić. Korzystanie z wyszukiwania pełnotekstowego pozwoliłoby na zmniejszenie kryteriów do jednego na kolumnę, ale nadal będziesz musiał wyraźnie określić kolumny.
Ponieważ używasz SQL Server, zaryzykuję przypuszczenie, że jest to pytanie C#. Musisz zrobić coś takiego (zakładając, że konstruujesz SqlCommand
lub DbCommand
sprzeciw się; jeśli korzystasz z ORM, wszystkie zakłady są wyłączone i prawdopodobnie i tak o to nie pytasz):
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();