>我有一个表,其中一列是一个包含三个字符的字符串,每个字符都有一个值 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 结尾的所有内容。案例 2 正在返回所有内容!它不会在开头、中间或结尾处测量值。它正在返回一切。
案例1 和案例 3 工作正常。但是,案例 2 不起作用。这有什么问题吗?
No."%1%"应该返回出现"1"的所有内容。它可以是"100"、"010"或"101",但不能是"000"。
从 sqlite like 子句参考页面:
百分号表示零个、一个或多个数字或字符。下划线表示单个数字或字符。这些符号可以组合使用。
通过说%1%
您正在搜索至少有一个数字 1 的元素,无论它在哪里。这主要是因为 % 表示零、一次或多次出现。以下示例在该链接中对此进行了进一步解释:
其中工资像"%200%"
查找任何位置有 200 的任何值
因此,我们可以看到您确实得到了预期的行为。