使用NSPredicate时出现问题

时间:2011-01-24 11:23:29

标签: iphone sqlite core-data nspredicate

Sql查询:

从test_mart中选择* where replace(替换(替换(替换(替换(替换(降低(名称),'+'),'_'),'the'),'the'),'a'),'a')='tariq “

我可以轻松解决以下查询问题,如果我必须使用简单的Sqlite ...但在当前项目中我使用的是Core Data,因此对NSPredicate不太熟悉。

该功能涉及删除所有BUT字母数字字符,这意味着删除特殊字符。

比较中应该有效的字符是

ABCDEFGHIJKLMNOPQRESTUVWXYZ1234567890

但我们不应该对以下字符的比较失败

:;,〜`@#$%^&安培; *()_- + =“”/?.& GT;,< | \

或者以下的话

'''一个''''

一些例子:

  1. '沃尔玛'将被视为与'沃尔玛'相同的收款人

  2. '鞋店'将被视为与'鞋店'相同的收款人

  3. 'Domino's Pizza'将被视为与'Dominos Pizza'相同的收款人

  4. '测试收款人;'将被视为与“测试收款人”相同的收款人
  5. 任何人都可以建议适当的谓词/正则表达式吗?

    由于

2 个答案:

答案 0 :(得分:1)

我会在数据库中有一个额外的字段,它将是原始的处理版本,其中删除了所有不相关的字符。然后用它进行比较。

您可能希望查看可能更符合您目的的soundex算法... Soundex

答案 1 :(得分:1)

在我看来,您希望在将数据设置到核心数据存储之前对其进行规范化。因此,如果您获得“沃尔玛”,请将其标准化为“沃尔玛”一次,然后保存。那么你将不会多次进行所有这些昂贵的即时比较。

根据您的规则,规范化将非常简单:

  • 删除单词“a”,“an”和“the”
  • 删除标点符号