Sepertinya Anda benar-benar mencari pencarian teks lengkap, terutama karena Anda ingin menimbang kata-kata.
Untuk menggunakan LIKE
, Anda harus menggunakan beberapa ekspresi (satu per kata, per kolom), yang berarti SQL dinamis. Saya tidak tahu bahasa apa yang Anda gunakan, jadi saya tidak dapat memberikan contoh, tetapi Anda harus membuat pernyataan seperti ini:
Untuk "Hula Hoop":
where (ProductName like '%hula%' or ProductName like '%hoops%')
and (Description like '%hula%' or Description like '%hoops%')
and (ShortName like '%hula%' or ShortName like '%hoops%')
dll.
Sayangnya, itu benar-benar satu-satunya cara untuk melakukannya. Menggunakan Pencarian Teks Lengkap akan memungkinkan Anda mengurangi kriteria menjadi satu kriteria per kolom, tetapi Anda masih harus menentukan kolom secara eksplisit.
Karena Anda menggunakan SQL Server, saya akan menebak bahwa ini adalah pertanyaan C#. Anda harus melakukan sesuatu seperti ini (dengan asumsi Anda sedang membangun SqlCommand
atau DbCommand
keberatan sendiri; jika Anda menggunakan ORM, semua taruhan dibatalkan dan Anda mungkin tidak akan menanyakan hal ini):
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();