我有代码片段,我按字符串"niv"
搜索联系人:
idCursor = mApp.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Data.CONTACT_ID },
"( display_name LIKE ? ) OR ( data1 LIKE ? )",
new String[] {"niv%", "niv%"},
ContactsContract.Data.CONTACT_ID + " ASC");
因此,此查询会查找电子邮件(data1
)或display_name
以niv
开头的联系人。它应该记录display_name
为Niv The Great
但如果display_name
为Great Niv
,则会发生什么。第二个单词从niv
如何明智地编写查询以不影响搜索性能,而是采取第二种情况?
预期行为
Niv The Great
:匹配Great Niv
:匹配Kaniv The Great
:不匹配Great Roniv
:不匹配答案 0 :(得分:0)
在参数值之前和之后添加通配符%
,如下所示:( display_name LIKE '%' || ? || '%')
这样它将搜索char序列出现的任何地方
答案 1 :(得分:0)
我们可以在W3C documentation中看到SQL LIKE
运算符,您可以使用:
"s%"
过滤单词以's'开头; "%s"
过滤了以's'结尾的字; "%s%"
过滤包含's'的单词。我希望它可以帮到你。
答案 2 :(得分:0)
使用以下方式:
String query="SELECT *
FROM Crop_Mst
WHERE varDesc LIKE '%a%'
OR
varName LIKE '%a%'";
rawQuery(query, null);
根据您的要求使用过滤器。
答案 3 :(得分:0)
idCursor = mApp.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Data.CONTACT_ID },
"( display_name LIKE ? ) OR ( data1 LIKE ? )",
new String[] {"niv%", "niv%","%niv%"},
ContactsContract.Data.CONTACT_ID + " ASC");
在您的查询位置添加一个,即%s%
答案 4 :(得分:0)
试试这个:
idCursor = mApp.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Data.CONTACT_ID },
"( display_name LIKE ? ) OR ( display_name LIKE ? ) OR ( data1 LIKE ? ) OR ( data1 LIKE ? )",
new String[] {"niv%" , "% niv%", "niv%", "% niv%"},
ContactsContract.Data.CONTACT_ID + " ASC");