如何在 FMDB 查询中使用 Like with Text iOS Swift 4?
How to using Like with Text in FMDB query iOS Swift 4?
我想用 like 查询并尝试这样:
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)
}
但它不起作用。
只需在 SQL 语句中使用 ?
传递参数,并用 SQL 通配符包裹传递的值,如下所示:
let name = "%pp%"
...
var queryString = "select * from products where name like ? and deleted = 0 order by id desc"
原因在于 SQLite 并且可能在所有其他 SQL 引擎中,参数是一个包含其值和类型信息的完整实体。因此,从不需要像 '%?%'
这样的引号 (') 中包含参数,这实际上是一种错误的做法。
此外,like
运算符只需要一个字符串表达式作为操作数,如果需要,它可能包含 SQL 通配符。因此,您只需要创建一个带有嵌入式通配符(%、_ 等)的字符串表达式,并在需要时将其传递给您的语句。
试试这个:
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)
}
它对我有用(swift 4,Xcode 9):
let texto_like : String = "%\(texto)%"
let sql = "select * from TABLE where MY_COLUMN like ? COLLATE NOCASE"
我想用 like 查询并尝试这样:
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)
}
但它不起作用。
只需在 SQL 语句中使用 ?
传递参数,并用 SQL 通配符包裹传递的值,如下所示:
let name = "%pp%"
...
var queryString = "select * from products where name like ? and deleted = 0 order by id desc"
原因在于 SQLite 并且可能在所有其他 SQL 引擎中,参数是一个包含其值和类型信息的完整实体。因此,从不需要像 '%?%'
这样的引号 (') 中包含参数,这实际上是一种错误的做法。
此外,like
运算符只需要一个字符串表达式作为操作数,如果需要,它可能包含 SQL 通配符。因此,您只需要创建一个带有嵌入式通配符(%、_ 等)的字符串表达式,并在需要时将其传递给您的语句。
试试这个:
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)
}
它对我有用(swift 4,Xcode 9):
let texto_like : String = "%\(texto)%"
let sql = "select * from TABLE where MY_COLUMN like ? COLLATE NOCASE"