0

我试图在核心数据中进行一次提取,我按属性日期的月份进行分组。核心数据中的strftime SQL函数

在SQL

SELECT  SUM(total) as value, 
      date as date, 
      strftime('%m-%Y', date) as convertDate 
FROM  table 
GROUP BY convertDate 

我看不出有什么功能,我可以使用strftime。 有没有办法做到这一点NSFetchRequest,而不是NSFetchedResultController

+2

不,CoreData不具有的strftime或DATEPART相等。而它的groupby只适用于持久性属性,而不是计算表达式。如果您想通过fetchRequest实现此目的,则必须为计算的月份/年添加持久属性,并确保它与日期保持同步。 – pbasdf

+0

这就是我所害怕的。我知道核心数据不是一个ORM,但我有点失望。谢谢 – Hugo

回答

-1

您可以通过使用NSExpressionDescription

为通过分组随着NSFetchRequest你可以看到this tutorial做这做这个stackOverFlow question

对于这里的总和NSExpressionDescription添加到您的NSFetchRequest

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; 
expressionDescription.name = @"sumOfAmounts"; 
expressionDescription.expression = [NSExpression expressionForKeyPath:@"@sum.total"]; 
expressionDescription.expressionResultType = NSDecimalAttributeType; 

对于我认为您可以在获取记录时使用NSDateFormatter进行格式化的日期。

让我知道这是有帮助:)

UPDATE

[fetch setPropertiesToFetch:[NSArray arrayWithObjects:statusDesc, expressionDescription, nil]]; 
[fetch setPropertiesToGroupBy:[NSArray arrayWithObject:statusDesc]]; 
[fetch setResultType:NSDictionaryResultType]; 
NSError* error = nil; 
NSArray *results = [myManagedObjectContext executeFetchRequest:fetch 
                 error:&error]; 
+0

谢谢你的回答。我唯一的问题是在nsfetchrequest中按月分组。我不想在请求 – Hugo

+0

后分组,我认为在教程中是这样。看我的更新 –

+0

获取是NSFetchRequest –