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

时间:2015-05-29 07:30:18

标签: ios sql sqlite

在从服务器收集数据3天后,我的iOS应用程序遇到了问题。我试图查明问题并且不知道它是否存在数据损坏问题或代码中的问题。

我已将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];

1 个答案:

答案 0 :(得分:0)

好吧,所以在黑暗中有一点镜头,因为我不知道它为你做错了什么,我的目标C和谓词知识是有限的,但我想你最终会得到什么是这样的:

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中的任何一个。或者&#39; Guardian&#39;也必须得到满足。