【问题标题】:Android sqlite searching two columnsAndroid sqlite搜索两列
【发布时间】:2019-02-27 19:16:28
【问题描述】:

我对如何搜索两个单独的列有点困惑。 我正在使用 sqlite。

Cursor cursor = qb.query(db, sqlSelect, "firstName LIKE ? OR lastName LIKE ?" , new String[]{"%" + name + "%", "%" + name + "%"},空,空,空);

当我使用 for say Joe Bob 进行搜索时,我可以使用该查询

“乔”返回乔·鲍勃

“鲍勃”返回乔鲍勃

但不是“乔·鲍勃”

所以只想找到一种方法来搜索 firstName ' ' lastName 但我没有运气

【问题讨论】:

  • 你试过"firstName + ' ' + lastName like ?"吗?

标签: java android sql sqlite search


【解决方案1】:

您似乎想连接名字和姓氏。

您可以使用 || 执行此操作,因此您的基础查询可能是:-

SELECT firstName, lastName, firstName||' '||lastName AS name_in_full WHERE firstName LIKE ? OR lastName LIKE ?
  • 那个?表示提供的值(因此上述内容不会按预期工作)。
  • 您可能希望也可能不希望结果光标中的 firstName 和 lastName 列
  • 光标将有一个名为 name_in_full 的列,而正是这一列将两个名称连接起来。

为了供 query 方法使用,您可以将 sqlSelect 设置为

sqlSelect = "firstName,lastName,firstName||' '||lastName AS name_in_full";

  • 根据需要省略名字和姓氏以及各自的分隔逗号

问题的另一种解释

如果您想要找到并且只是两者的组合,例如你有诸如

之类的行
Bob Hope
Joe Joe
Bob Bob
Joe Bob

并且您想找到第 1 Joe Bob 行,即 Joe Bob 但没有其他行而不是 OR强> 使用 AND

Cursor cursor = qb.query(
    db, 
    sqlSelect, 
    "firstName LIKE ? AND lastName LIKE ?", //<<<<<<<<<< OR change to AND
    new String[]{"%" + name + "%", "%" + name + "%"}, 
    null, null, null
);

【讨论】:

    【解决方案2】:

    您只需要 1 个参数:

    Cursor cursor = qb.query(
        db, 
        sqlSelect, 
        "firstName || ' ' || lastName LIKE ?", 
        new String[]{"%" + name + "%"}, 
        null, null, null
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多