2016-11-03 26 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數據庫解決方案

相關問題