sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Vælg lignende søgeord i enhver rækkefølge

Det lyder som om du er virkelig leder efter fuldtekstsøgning, især da du vil vægte ordene.

For at bruge LIKE , skal du bruge flere udtryk (et pr. ord, pr. kolonne), hvilket betyder dynamisk SQL. Jeg ved ikke hvilket sprog du bruger, så jeg kan ikke give et eksempel, men du bliver nødt til at lave en erklæring, der er sådan her:

For "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%')

osv.

Desværre er det virkelig den eneste måde at gøre det på. Brug af fuldtekstsøgning vil give dig mulighed for at reducere dine kriterier til ét pr. kolonne, men du skal stadig angive kolonnerne eksplicit.

Da du bruger SQL Server, vil jeg gætte på, at dette er et C#-spørgsmål. Du bliver nødt til at gøre noget som dette (forudsat at du konstruerer SqlCommand eller DbCommand indvend dig selv; hvis du bruger en ORM, er alle væddemål slået fra, og du ville sandsynligvis ikke spørge om dette alligevel):

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. Indsættelse af datoværdi i MySQL gennem PHP

  2. Tidszone med sommertid i PostgreSQL

  3. Opdater Clob-kolonnen i Oracle

  4. Hvordan skal jeg forespørge på MySQL, og hvordan cachelagres resultaterne fra MySQL?