【问题标题】:Query using LIKE isn't working using GreenDAO使用 LIKE 的查询在使用 GreenDAO 时不起作用
【发布时间】: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_")

标签: android sqlite greendao


【解决方案1】:

没有。 "%1%" 应该返回出现 "1" 的所有内容。可以是“100”、“010”或“101”,但不能是“000”。

【讨论】:

    【解决方案2】:

    来自sqlite like clause参考页面:

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

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

    像“%200%”这样的薪水

    查找在任何位置具有 200 的任何值

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

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2010-10-04
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多