【问题标题】:SELECT statement returns no results on iOS 8.2 (SQL 3.8.4)SELECT 语句在 iOS 8.2 (SQL 3.8.4) 上不返回任何结果
【发布时间】:2015-03-18 08:10:19
【问题描述】:

下面的 SELECT 语句在 iOS 8.1 和之前的版本上运行良好。现在,在我更新的 iOS 8.2 设备上,它只会返回没有任何错误的结果。我发现 iOS 8.2 将 SQLite 版本从 3.7.13 更新到了 3.8.4。这似乎是问题所在,因为我没有更改任何其他内容。

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString*' (doesn't work --> no results)

我玩了一下,似乎问题出在“带前缀”的通配符 *.删除它会返回结果。

SELECT * FROM allLanguages WHERE allLanguages MATCH 'searchString*' (works)

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString' (doesn't work --> no results)

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString*' (doesn't work --> no results)

有人知道这里有什么问题吗? SELECT 语句可以用在 SQL 3.8.4 下工作的不同语句替换吗?

非常感谢!

【问题讨论】:

    标签: ios sqlite ios8.2


    【解决方案1】:

    经过一些研究,在 '"*searchString*"' 周围加上双引号对我有用。无法解释原因,但它有效;)

    SELECT * FROM allLanguages WHERE allLanguages MATCH '"*searchString*"'
    

    【讨论】:

    • 我有同样的问题,但您的解决方案似乎并不完美:它只返回以“searchString”开头的匹配文本语言。对吗?
    • 用前导 * 和尾随 * 包围 searchString 还会返回 searchString 出现在任意位置的结果,而不仅仅是在开头。这就是我所经历的。您是否尝试过使用前导 * 和尾随 *?
    • 仅供参考:如果您在 Objective C 中的 NSString 上下文中使用此语句,则必须使用 \ 转义双引号。例如。 NSString *query = @"SELECT * FROM allLanguages WHERE allLanguages MATCH '\"*searchString*\"'";这可能会有所帮助。
    • 当然,这正是我使用的,双引号被转义,但它只返回以我的研究文本开头的条目......在iOS更新之前,它可以正常工作并返回所有出现,无论何时搜索文本位于开头或结尾...这是非常紧张的行为。
    • 很抱歉让您感到困惑。你是对的。它只匹配以“searchString”开头的单词。我所涉及的是在“句子”中间匹配单词。例如如果您搜索“有趣”,它将匹配“这是一个有趣的酒吧”。经过一些研究,看起来领先的星号不适用于与 MATCH 一起使用的 fts。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2012-08-23
    • 2020-11-03
    • 2011-05-15
    • 2014-01-15
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多