我有一个表,其中一列是一个包含三个字符的字符串,每个字符的值为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不起作用。这有什么问题吗?
答案 0 :(得分:0)
没有。 “%1%”应该返回发生“1”的所有内容。它可以是“100”,“010”或“101”,但不是“000”。
答案 1 :(得分:0)
来自sqlite like clause参考页:
百分号表示零,一个或多个数字或字符。下划线表示单个数字或字符。这些符号可以组合使用。
通过说%1%
,您正在搜索至少有一个数字1的元素,无论它在哪里。这主要是因为%表示零,一次或多次出现。通过以下示例在该链接中进一步解释了这一点:
在哪里等待&#39;%200%&#39;
查找任何位置 的任何值
所以我们可以看到你确实得到了预期的行为。