【发布时间】:2016-05-28 15:47:44
【问题描述】:
我有一个表,其中一列是一个包含三个字符的字符串,每个字符都有一个值 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 不起作用。这有什么问题吗?
【问题讨论】:
-
您必须详细说明 case2 究竟是如何不起作用的?输出是什么..?
-
我已经编辑了我的问题。请看一下
-
这是意料之中的,这些数字中的每一个都包含一个 1。这并不意味着它必须在它之前和之后有一些东西,%1% 意味着它可以,但不必前后都有。
-
是的,我想过。但是我认为直接查询更好。我还坚持创建 3 列,这意味着每个案例...
-
仍然不完全清楚您对 case2 的期望,但是如果您希望您的 like 子句匹配每个 3 字符字符串,第二个位置为 '1',您可以使用下划线通配符 (@987654323 @) 表示第一个和第三个字符,即
like("_1_")。