我正在尝试编写一个涉及WHERE LIKE语句的查询,但是我遇到了以下问题。

当我这样写查询时:

"SELECT * FROM db WHERE name LIKE \"%%@%%\""


它被解释为:

SELECT * FROM db WHERE name LIKE "(null)"


当我查询以下内容时:

"SELECT * FROM db WHERE name LIKE \"%%%@%%\""


它被解释为:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"


这个:

[@"SELECT * FROM db WHERE name LIKE \"%" stringByAppendingString:name] stringByAppendingString:@"%\""]


解释为:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"


有没有办法纠正或解决此问题?

最佳答案

如果要使用字符串格式,则必须为:

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db WHERE name LIKE '%%%@%%'", someValue];


前两个%%变为单个%%@被替换为someValue中的任何字符串。最后两个%%成为单个%

query最终是:

SELECT * FROM db WHERE db LIKE '%apple%'


假设someValue是字符串@"apple"

附带说明一下,如果您正在使用各种SELECT * FROM函数和特定的索引号,则最好避免使用sqlite3_column_xxx,因为您无法确定返回列的顺序是否与您的代码匹配。显式列出查询中所需的列是更安全明了的。

10-06 06:11