Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Wybierz podobne słowa kluczowe w dowolnej kolejności

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();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj z DateTime na INT

  2. Jak sprawdzić, czy kolumna istnieje w tabeli SQL Server?

  3. Pętla If w instrukcji „Then” instrukcji Case w SQL Server 2008

  4. Jak w SQL Server 2005 ustawić kolumnę liczb całkowitych, aby upewnić się, że wartości są większe od 0?

  5. 3 najważniejsze powody, dla których ludzie przechodzą na SaaS