sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Välj Gilla nyckelord i valfri ordning

Det låter som att du är på riktigt letar efter fulltextsökning, särskilt eftersom du vill vikta orden.

För att använda LIKE måste du använda flera uttryck (ett per ord, per kolumn), vilket betyder dynamisk SQL. Jag vet inte vilket språk du använder, så jag kan inte ge ett exempel, men du måste skapa ett uttalande som är så här:

För "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.

Tyvärr är det egentligen det enda sättet att göra det på. Genom att använda fulltextsökning kan du minska dina kriterier till ett per kolumn, men du måste fortfarande ange kolumnerna explicit.

Eftersom du använder SQL Server, kommer jag att gissa att detta är en C#-fråga. Du måste göra något liknande (förutsatt att du konstruerar SqlCommand eller DbCommand invända mot dig själv; om du använder en ORM är alla satsningar avstängda och du skulle förmodligen inte fråga detta ändå):

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. Åtkomst till PostgreSQL-server från LAN

  2. PostgreSQL multi-värde upserts

  3. Datum- och tidsenheter i MySQL (fullständig lista)

  4. ORA-30926:kan inte få en stabil uppsättning rader i källtabellerna när tabeller slås samman