2016-11-03 31 views
0

我实际上想要计算持续时间并按降序对结果进行排序。如何查找从startTime和endTime [通过浮油的DateTime]的持续时间

我都试过了,

db.run(totalSuccess.sortBy(ele => computeDuration(ele.startedOn, ele.completedOn).desc)) 

private def computeDuration(d1: Option[DateTime], d2: Option[DateTime]) = (d1, d2) match { 
    case (Some(d1),Some(d2)) => new Period(d1, d2, PeriodType.hours()) 
    case _ => None 
} 

得到一个类型不匹配错误的ele.startedOnRep[Option[DateTime]computeDuration预计Option[DateTime]

可以吗?或者有没有其他简单的方法来做到这一点。

+0

不,这是行不通的。您必须记住Slick生成SQL中的数据库IO操作。尽管API看起来像标准的Scala代码,但除非Slick明确支持,否则不能使用任意类型。在你的情况下,你必须定义一个用于间隔计算的Slick函数,它将映射到一个本地SQL函数。你可能会发布一个完整的代码示例编译? – user3588254

回答

0

使用数据库功能在数据库级别执行此操作。

def diff(d1: Rep[DateTime], d2: Rep[DateTime]): Rep[Long] = { 
    SimpleFunction.binary[DateTime, DateTime, Long]("datediff").apply(d1, d2) 
} 

具有适当的数据库功能替换为datediff数据库解决方案

相关问题