代码之家  ›  专栏  ›  技术社区  ›  reza_khalafi

如何在FMDB query iOS Swift 4中对文本使用Like?

  •  1
  • reza_khalafi  · 技术社区  · 7 年前

    喜欢 试着这样做:

    let name = "pp" //apple
    
    let db = openDB()
      do {
          var queryString = "select * from products where name like '%?%' and deleted = 0 order by id desc"
          let rs = try db.executeQuery(queryString, values:[name])
          var arr:Array<Product> = []
          while rs.next() {
          arr.append(parseProductDB(rs))
          }
          closeDB(db)
    } catch {
          print("failed: \(error.localizedDescription)")
          closeDB(db)
    }
    

    但它不起作用。

    3 回复  |  直到 6 年前
        1
  •  1
  •   reza_khalafi    7 年前

    试试这个:

    let db = openDB()
    do {
        var queryString =
        queryString = String(format:"select * from products where name like '%%%@%%' and deleted = 0 order by id desc",name)
        let rs = try db.executeQuery(queryString, values:nil)
        var arr:Array<Product> = []
        while rs.next() {
        arr.append(parseProductDB(rs))
        }
        closeDB(db)
    
    } catch {
                print("failed: \(error.localizedDescription)")
                closeDB(db)
    }
    
        2
  •  1
  •   Stephen Rauch Eugen    6 年前

    它对我有效(swift 4,Xcode 9):

    let texto_like : String = "%\(texto)%"
    
    let sql = "select * from TABLE where MY_COLUMN like ? COLLATE NOCASE"
    
        3
  •  0
  •   halfer Rajnish Kumar    5 年前

    只需在SQL语句中使用 ? 并用SQL通配符包装传递的值,如下所示:

    let name = "%pp%"
    ...
    var queryString = "select * from products where name like ? and deleted = 0 order by id desc"
    

    原因是在SQLite中,可能在其他所有SQL引擎中,参数都是由其值和类型信息组成的完整实体。因此,在引号(')内包装参数,如 '%?%' 这从来都不是必需的,实际上是一种错误的做法。

    而且 like 运算符只需要一个字符串表达式作为其操作数,如果需要,该操作数可能包含SQL通配符。因此,您只需要创建一个包含嵌入通配符(%、等)的字符串表达式,并在需要时将其传递给您的语句。