Android sqlite:如何在值中搜索第二个单词?

时间:2015-02-26 11:00:22

标签: java android

我有代码片段,我按字符串"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_nameniv开头的联系人。它应该记录display_nameNiv The Great

的情况

但如果display_nameGreat Niv,则会发生什么。第二个单词从niv

开始

如何明智地编写查询以不影响搜索性能,而是采取第二种情况?

预期行为

  • Niv The Great:匹配
  • Great Niv:匹配
  • Kaniv The Great:不匹配
  • Great Roniv:不匹配

5 个答案:

答案 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");