【问题标题】:SQLite and Objective C - WHERE LIKE Statement ErrorSQLite 和 Objective C - WHERE LIKE 语句错误
【发布时间】:2018-12-05 02:16:51
【问题描述】:

我正在尝试编写一个涉及 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"

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

【问题讨论】:

  • 是什么促使你写LIKE \"%%@%\""?对我来说,这看起来像是一个非常奇怪的 LIKE 子句。
  • 我看过123这样的帖子,希望对你有帮助哈哈。

标签: ios sql objective-c sqlite


【解决方案1】:

如果要使用字符串格式,则需要:

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

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

query 最终成为:

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

假设someValue 是字符串@"apple"

附带说明,如果您使用各种sqlite3_column_xxx 函数和特定索引号,最好避免使用SELECT * FROM,因为您无法确定返回列的顺序是否与您的代码匹配。从查询中显式列出您想要的列会更安全、更清晰。

【讨论】:

  • 这很有道理——非常感谢!我很感激。
【解决方案2】:

Doi! 这个:

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

被解释为:

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

这实际上是我正在寻找的东西(起初并没有意识到),这项工作感觉有点......不必要的冗长。

【讨论】:

    【解决方案3】:

    试试这个。它会工作的。

      NSString *yourSqlQuery = [NSString stringWithFormat:@"Select * from yourTableName where name LIKE '%%%@%%'",name];
    

    【讨论】:

    • 这提供了与我的答案相同的信息。请不要发布重复的答案。您应该删除此答案或对其进行编辑以提供其他答案中没有的相关有用信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多