我正在尝试编写一个涉及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"
有没有办法纠正或解决此问题?
答案 0 :(得分:1)
尝试这个。它将起作用。
NSString *yourSqlQuery = [NSString stringWithFormat:@"Select * from yourTableName where name LIKE '%%%@%%'",name];
答案 1 :(得分:0)
土井! 这个:
[@"SELECT * FROM db WHERE name LIKE \"%%" stringByAppendingString:name] stringByAppendingString:@"%%\""]
被解释为:
SELECT * FROM db WHERE db LIKE "%apple%"
实际上是我要寻找的东西(起初并没有意识到),但是这种解决方法感觉有点……不必要地冗长。
答案 2 :(得分:0)
如果要使用字符串格式,则必须为:
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
,因为您无法确定返回的列的顺序是否与您的代码匹配。显式列出查询中所需的列是更安全明了。