ऐसा लगता है कि आप वास्तव में हैं पूर्ण-पाठ खोज की तलाश में, खासकर जब से आप शब्दों को महत्व देना चाहते हैं।
LIKE
. का उपयोग करने के लिए , आपको एकाधिक अभिव्यक्तियों (प्रति शब्द एक, प्रति कॉलम) का उपयोग करना होगा, जिसका अर्थ है गतिशील एसक्यूएल। मुझे नहीं पता कि आप किस भाषा का उपयोग कर रहे हैं, इसलिए मैं एक उदाहरण नहीं दे सकता, लेकिन आपको इस तरह का एक बयान देना होगा:
"हुला हुप्स" के लिए:
where (ProductName like '%hula%' or ProductName like '%hoops%')
and (Description like '%hula%' or Description like '%hoops%')
and (ShortName like '%hula%' or ShortName like '%hoops%')
आदि.
दुर्भाग्य से, यह वास्तव में ऐसा करने का एकमात्र तरीका है। पूर्ण पाठ खोज का उपयोग करने से आप अपने मानदंड को प्रति स्तंभ एक तक कम कर सकते हैं, लेकिन आपको अभी भी स्तंभों को स्पष्ट रूप से निर्दिष्ट करना होगा।
चूंकि आप SQL सर्वर का उपयोग कर रहे हैं, इसलिए मैं अनुमान लगाने जा रहा हूं कि यह एक सी # प्रश्न है। आपको कुछ ऐसा करना होगा (मान लीजिए कि आप SqlCommand
. बना रहे हैं या DbCommand
अपने आप पर आपत्ति करें; यदि आप ओआरएम का उपयोग कर रहे हैं, तो सभी दांव बंद हैं और आप शायद वैसे भी यह नहीं पूछ रहे होंगे):
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();