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

时间:2019-04-29 14:52:22

标签: dart flutter sqflite

我正在尝试使用companyName来查询Companies表,我想获取其companyName包含查询字符串的公司,而不只是其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;
}

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

7 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:1)

这对我来说最终是完美的代码。

        string tableData = "Test;One;3;End\nNew line;Two;4;End";
        //Target table, to be extended
        Word.Table tbl = doc.Tables[1];
        Word.Range rngTbl = tbl.Range;
        rngTbl.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
        //Target for inserting the data (end of the document)
        Word.Range rng = doc.Content;
        rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
        rng.Text = tableData;
        Word.Table tblExtend = rng.ConvertToTable(";", missing, missing, missing, missing,
                missing, missing, missing, missing, missing, missing, missing, missing, missing,
                missing, Word.WdDefaultTableBehavior.wdWord8TableBehavior);
        //Move the new table content to the end of the target table
        tblExtend.Range.Cut();
        rngTbl.PasteAppendTable();

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

以下代码有效:

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

答案 4 :(得分:0)

您必须使用以下语法: Like“ searched string”

这里是一个例子:

var res =等待db.rawQuery('SELECT * FROM从公司名称类似“%$ filterCriteria%” ');

它与flutter和sqflite一起使用

答案 5 :(得分: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]);

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

答案 6 :(得分:0)

这对我有用

var res =等待db.rawQuery(“ SELECT * FROM公司名称为LIKE?”,['%$ filterCriteria%']);