Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Изберете подобни ключови думи в произволен ред

Звучи като наистина търсите търсене в пълен текст, особено след като искате да претеглите думите.

За да използвате LIKE , ще трябва да използвате множество изрази (по един на дума, на колона), което означава динамичен SQL. Не знам кой език използвате, така че не мога да дам пример, но ще трябва да създадете изявление, което е като това:

За „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%')

и т.н.

За съжаление, това наистина е единственият начин да го направите. Използването на пълнотекстово търсене би ви позволило да намалите критериите си до един за колона, но пак ще трябва изрично да посочите колоните.

Тъй като използвате SQL Server, ще рискувам да предположа, че това е въпрос за C#. Трябва да направите нещо подобно (ако приемем, че създавате SqlCommand или DbCommand възразете сами; ако използвате ORM, всички залози са изключени и вероятно няма да питате това така или иначе):

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. Как мога да структурирам заявка, за да ми даде само редовете, които съответстват на ВСИЧКИ стойности в CSV списък с идентификатори в T-SQL

  2. Как да параметризирам низ за връзка с база данни в SSIS пакет?

  3. Как да запазите изчислена колона GEOMETRY или GEOGRAPHY

  4. Име на колони за променлива на SQL Server?

  5. Как да преобразувам час DATEPART, който е военно време за полунощ (00), в стойност, която мога да използвам, когато ми трябва за изчисление?