sql >> Database >  >> RDS >> Sqlserver

SQL Select Like Trefwoorden in elke volgorde

Het klinkt alsof je echt bent op zoek naar full-text zoeken, vooral omdat u de woorden wilt wegen.

Om LIKE . te gebruiken , moet u meerdere uitdrukkingen gebruiken (één per woord, per kolom), wat dynamische SQL betekent. Ik weet niet welke taal je gebruikt, dus ik kan geen voorbeeld geven, maar je zult een verklaring moeten geven die als volgt is:

Voor "Hoelahoep":

where (ProductName like '%hula%' or ProductName like '%hoops%')
  and (Description like '%hula%' or Description like '%hoops%')
  and (ShortName like '%hula%' or ShortName like '%hoops%')

enz.

Helaas is dat echt de enige manier om het te doen. Door Full Text Search te gebruiken, kunt u uw criteria terugbrengen tot één per kolom, maar u moet de kolommen nog steeds expliciet specificeren.

Aangezien u SQL Server gebruikt, waag ik het erop dat dit een C#-vraag is. Je zou zoiets als dit moeten doen (ervan uitgaande dat je het SqlCommand of DbCommand maak zelf bezwaar; als je een ORM gebruikt, zijn alle weddenschappen uitgeschakeld en zou je dit waarschijnlijk toch niet vragen):

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. Top n verschillende waarden van één kolom in Oracle

  2. Best practices voor het ontwerpen van meertalige databases

  3. Uitzondering afhandelen en resultaat van functie retourneren

  4. vermijd sorteren op het MYSQL IN-trefwoord