5

我正在尝试使用 companyName 查询 Companies 表,我想获取其 companyName(s) 包含查询字符串的公司,而不仅仅是其 companyName 与我的查询字符串完全匹配的公司。如果我使用的是 sql,我会使用 ---WHERE companyName LIKE %queryString% 语句。所以我的问题是如何在 sqflite 中进行这样的查询?现在我收到一个语法错误,因为 %

表结构

CREATE TABLE Companies(
        id INTEGER PRIMARY KEY, 
        name TEXT,
        email TEXT, 
        website TEXT, 
        about TEXT, 
        phone TEXT,
        logo TEXT,
        created_at TEXT
      );
 );

搜索代码

Future<List<CompanyModel>> filterCompanies(String filterCriteria) async {
final db =await database;
List<CompanyModel> filteredCompanies = [];

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE %?%;", [filterCriteria]);
if(res.length !=null){
  for (var item in res){
    filteredCompanies.add(JobModel.fromDb(item));
  }

 } 
 return filteredCompanies;
}

添加 % 时,出现语法错误。

4

7 回答 7

13

接受的答案会导致我产生错误。我正在使用 sqflite:^1.1.7+1 和颤振:v1.13.5。
从下面的讨论中可以看出,百分比字符应该在参数中而不是在查询中,即

 res = await db.query(
  "Companies",
  where: "name LIKE ?"
  whereArgs: ['%$title']
 );

参考:https ://github.com/tekartik/sqflite/issues/316

于 2020-01-21T17:32:00.097 回答
6

我尝试了上面所有的答案,但没有奏效。最后:

await db.query(
  "Companies",
  where:  "name LIKE ?",
  whereArgs: ['%$query%']
);
于 2021-01-01T06:06:04.283 回答
5

以下代码有效:

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE '%$filterCriteria%'");

于 2019-06-04T21:28:31.333 回答
3

这是最终完美地为我工作的代码。

res = await db.query(
  "Companies",
  where: "name LIKE '%$?%'"
  whereArgs: [title]
);
于 2019-06-25T12:27:23.300 回答
0

你必须使用这个语法:LIKE "searched string"

这是一个例子:

var res = await db.rawQuery(' SELECT * FROM Companies WHERE name LIKE "%$filterCriteria%" ');

它适用于颤振和 sqflite

于 2020-02-12T21:28:26.987 回答
0

这对我有用

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE ?",['%$filterCriteria%']);

于 2020-04-20T22:14:59.747 回答
0

用这个

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE '%?%';", [filterCriteria]);

代替

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE %?%;", [filterCriteria]);

将类似条件放在单引号中('...')

于 2020-02-13T09:54:46.037 回答