我正在尝试编写一个涉及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
,因为您无法确定返回列的顺序是否与您的代码匹配。显式列出查询中所需的列是更安全明了的。