如何使用 LIKE 语句和 % 或 * sql 通配符查询 sqflite 数据库

Dil*_*ere 4 dart flutter sqflite

我正在尝试使用 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
      );
 );
Run Code Online (Sandbox Code Playgroud)

搜索代码

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;
}
Run Code Online (Sandbox Code Playgroud)

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

小智 11

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

await db.query(
  "Companies",
  where:  "name LIKE ?",
  whereArgs: ['%$query%']
);
Run Code Online (Sandbox Code Playgroud)


hos*_*.ch 10

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

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

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


Mun*_*ETA 6

下面的代码有效:

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

Run Code Online (Sandbox Code Playgroud)