如何将谓词转换为 SQL 语句?

3

我在我的iOS应用程序中遇到了一个问题,这个问题发生在从服务器收集数据3天后。我正在试图找出问题所在,但不知道它是数据污染问题还是代码问题。

我已将iOS数据库下载到我的Mac,并可以对其运行SQL语句。

是否有一种方法可以“转换”以下断言为SQL语句,以便我可以验证数据?

    NSMutableArray *predicates = [[NSMutableArray alloc] init];
    NSDate *twoWeeksago = [[NSCalendar autoupdatingCurrentCalendar] dateByAddingUnit:NSCalendarUnitDay
                                                                           value:-14
                                                                          toDate:[NSDate date]
                                                                         options:0];
    [predicates addObject:[NSPredicate predicateWithFormat:@"isRemoved == 0"]];
    [predicates addObject:[NSPredicate predicateWithFormat:@"(publicationDatetime >= %@) AND (publicationDatetime <= %@)", twoWeeksago, [NSDate date]]];
    [predicates addObject:[NSPredicate predicateWithFormat:@"(source == %@) OR (source == %@)", @"BBC", @"Guardian"]];
    NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];

您还需要关于此事的帮助吗? - MarioAna
当然,了解这个对将来会很有帮助 :) - Houman
请看下面我的回答。我真的希望它能帮到你。 - MarioAna
1个回答

0

好的,这有点靠猜测,因为我不知道它在你这里出了什么问题,而且我的Objective C和predicate知识也有限,但是我认为你最终得到的是这个:

where removed = 0
  and (publicationDatetime >= 2weeksAgo) AND (publicationDatetime <= today)
  and (source = 'BBC') OR (source = 'Guardian')

现在我认为它可能会在OR部分给您意外的结果。它基本上是在说它将返回符合以下条件的记录:

removed = 0
(publicationDatetime >= 2weeksAgo)
(publicationDatetime <= today)
(source = 'BBC')

OR

(source = 'Guardian')

我认为你需要更改的是这个:

(source = 'BBC') OR (source = 'Guardian')

转换为:

((source = 'BBC') OR (source = 'Guardian'))

将它们放入另一组括号中意味着必须满足所有其他条件,同时还必须满足“BBC”或“卫报”中的任何一个条件。


谢谢,我暂时接受,等到我完全测试过之后再做决定。 - Houman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接