使用LIKE查询并不是使用GreenDAO

时间:2016-05-28 15:47:44

标签: android sqlite greendao

我有一个表,其中一列是一个包含三个字符的字符串,每个字符的值为0或1.我想根据情况选择这些行。

我想执行这样的查询:

SELECT * FROM Item WHERE group_type LIKE ?

?可以是100或101或011或111或001.组合为0和1三个字符。

我尝试使用LIKE查询

WhereCondition where = null;
switch (condition) {
    case case1:
        where = ItemDao.Properties.GroupType.like("1%");
        break;
    case case2:
        where = ItemDao.Properties.GroupType.like("%1%");
        break;
    case case3:
        where = ItemDao.Properties.GroupType.like("%1");
        break;
}
List<Item> items = itemDao.queryBuilder().where(where).list();

case1按预期返回以1开头的所有内容。 case3按预期返回以1结尾的所有内容。 case2正在归还一切!它没有在开始,中间或结束时满足价值。它归还了一切。

case1和case3正常工作。但是,case2不起作用。这有什么问题吗?

2 个答案:

答案 0 :(得分:0)

没有。 “%1%”应该返回发生“1”的所有内容。它可以是“100”,“010”或“101”,但不是“000”。

答案 1 :(得分:0)

来自sqlite like clause参考页:

  

百分号表示零,一个或多个数字或字符。下划线表示单个数字或字符。这些符号可以组合使用。

通过说%1%,您正在搜索至少有一个数字1的元素,无论它在哪里。这主要是因为%表示零,一次或多次出现。通过以下示例在该链接中进一步解释了这一点:

  

在哪里等待&#39;%200%&#39;

     

查找任何位置 的任何值

所以我们可以看到你确实得到了预期的行为。