sql >> Databáze >  >> RDS >> Sqlserver

SQL Select Like Keywords v libovolném pořadí

Zní to, jako byste skutečně hledáte fulltextové vyhledávání, zejména proto, že chcete slova vážit.

Chcete-li použít LIKE , budete muset použít více výrazů (jeden na slovo, na sloupec), což znamená dynamické SQL. Nevím, jaký jazyk používáte, takže nemohu uvést příklad, ale budete muset vytvořit prohlášení, které je podobné tomuto:

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

atd.

Bohužel je to opravdu jediný způsob, jak to udělat. Použití fulltextového vyhledávání vám umožní zredukovat kritéria na jedno na sloupec, ale i tak budete muset sloupce explicitně specifikovat.

Protože používáte SQL Server, budu riskovat, že se jedná o otázku C#. Museli byste udělat něco takového (za předpokladu, že vytváříte SqlCommand nebo DbCommand namítat se; pokud používáte ORM, všechny sázky jsou vypnuté a pravděpodobně byste se na to stejně neptal):

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. Triky pro zlepšení průběžného monitorování databáze

  2. Importujte vybrané sloupce ze souborů CSV do tabulky SQL Server

  3. Vytvoření pole json pomocí concat s MySql

  4. MySQL – odstranění některých specifických tabulek z velké databáze