あなたは本当のようですね 特に単語に重みを付けたいため、全文検索を探しています。
LIKE
を使用するには 、動的 SQL を意味する複数の式 (単語ごと、列ごとに 1 つ) を使用する必要があります。あなたが使用している言語がわからないので、例を示すことはできませんが、次のようなステートメントを作成する必要があります:
「フラフープ」の場合:
where (ProductName like '%hula%' or ProductName like '%hoops%')
and (Description like '%hula%' or Description like '%hoops%')
and (ShortName like '%hula%' or ShortName like '%hoops%')
など
残念ながら、それが本当に唯一の方法です。全文検索を使用すると、条件を列ごとに 1 つに減らすことができますが、それでも列を明示的に指定する必要があります。
あなたは 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();